Получение отдельных записей с полем даты?

StackOverflow https://stackoverflow.com/questions/508274

  •  21-08-2019
  •  | 
  •  

Вопрос

У меня есть запрос, в котором я хочу получить отдельное описание по последней введенной дате и идентификатору описания.Я могу получить отдельную часть, но у меня возникают проблемы с попыткой получить идентификатор, поскольку я использую MAX для даты.Вот запрос:

SELECT DISTINCT Resource.Description, MAX(arq.DateReferred) AS DateReferred, arq.AssessmentResourceID
FROM AssessmentXResource AS arq 
INNER JOIN Resource ON arq.ResourceID = Resource.ResourceID 
INNER JOIN Assessment AS aq 
INNER JOIN [Case] AS cq ON aq.CaseID = cq.CaseID 
INNER JOIN [Plan] AS pq ON cq.CaseID = pq.CaseID ON arq.AssessmentID = aq.AssessmentID
WHERE     (pq.PlanID = 22)
GROUP BY Resource.Description, arq.AssessmentResourceID
ORDER BY Resource.Description

Я уверен, что это просто, но я этого не вижу.

Это было полезно?

Решение

SELECT
    Resource.Description,
    arq.DateReferred AS DateReferred,
    arq.AssessmentResourceID
FROM
    Resource
INNER JOIN
    AssessmentXResource AS arq 
        ON arq.ResourceID = Resource.ResourceID 
        AND arq.DateReferred = (
                                SELECT
                                    MAX(DateReferred)
                                FROM
                                    AssessmentXResource
                                WHERE
                                    ResourceID = Resource.ResourceID
                               )
INNER JOIN
    Assessment AS aq
        ON arq.AssessmentID = aq.AssessmentID
INNER JOIN
    [Case] AS cq
        ON aq.CaseID = cq.CaseID 
INNER JOIN
    [Plan] AS pq
        ON cq.CaseID = pq.CaseID
WHERE
    (pq.PlanID = 22)
ORDER BY
    Resource.Description

Другие советы

Я не вижу причины для объединения с таблицей [Case], поэтому я это пропустил.Вы можете добавить его обратно, если он вам по какой-то причине понадобится.

SELECT
     RES.Description,
     ARQ.DateReferred,
     ARQ.AssessmentResourceID
FROM
     AssessmentXResource ARQ
INNER JOIN Resource ON
     ARQ.ResourceID = RES.ResourceID
INNER JOIN Assessment AQ ON
     AQ.AssessmentID = ARQ.AssessmentID
INNER JOIN [Plan] PQ ON
     PQ.CaseID = AQ.CaseID
LEFT OUTER JOIN AssessmentXResource ARQ2 ON
     ARQ2.ResourceID = ARQ.ResourceID AND
     ARQ2.DateReferred > ARQ.DateReferred
WHERE
     PQ.PlanID = 22 AND
     ARQ2.ResourceID IS NULL

Это может не сработать так, как вы ожидали, если в ваших данных имеются идентичные значения DateReferred для одного и того же ResourceID.Вам следует придумать бизнес-правило для этой ситуации и соответствующим образом изменить запрос.Кроме того, это будет немного отличаться от вашего запроса, если не гарантируется наличие совпадающих строк в таблицах Оценка, План и Случай для строк AssessmentXResource.Вы можете заставить его работать, добавив для них объединения в ARQ2, но это повлияет на производительность и будет немного сложнее.Если вам это нужно, оставьте комментарий, и я могу изменить запрос, чтобы его обработать, или, может быть, вы сможете разобраться в этом самостоятельно.

Короткий ответ:Функция max не будет работать, если вы группируете по идентификаторам.В конечном итоге вы вернете значение Max для каждого отдельного идентификатора.то естьвсе

Возможно, вам придется изменить представление подзапроса, но суть вы поняли.

Выберите id, val из таблицы где val = (выбрать max(val) из таблицы)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top