Получение отличных записей с полем даты? - PullRequest
1 голос
/ 03 февраля 2009

У меня есть запрос, в котором я хочу получить отдельное описание по последней введенной дате и идентификатору описания. Я могу получить определенную часть, но у меня возникают проблемы с попыткой получить ID, так как я использую 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

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

Ответы [ 3 ]

1 голос
/ 03 февраля 2009
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
0 голосов
/ 03 февраля 2009

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

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

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

0 голосов
/ 03 февраля 2009

Я не вижу причины для присоединения к таблице [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. Вам следует придумать бизнес-правило для этой ситуации и соответствующим образом изменить запрос. Кроме того, это будет немного отличаться от вашего запроса, если не будет гарантировано, что у вас есть соответствующие строки в таблицах Assessment, Plan и Case для строк AssessmentXResource. Вы можете заставить его работать, добавляя в них объединения в ARQ2, но это повлияет на производительность и будет немного сложнее. Если вам это нужно, то оставьте комментарий, и я могу изменить запрос, чтобы обработать его, или, может быть, вы можете выяснить это самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...