2009-02-03 10 views
1

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

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

ответ

1
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

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

0

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

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

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

Смежные вопросы