문제

입력한 최근 날짜와 설명 ID를 기준으로 고유한 설명을 얻고 싶은 쿼리가 있습니다.구별되는 부분을 얻을 수 있지만 날짜에 MAX를 사용하고 있기 때문에 ID를 얻으려고 하면 문제가 발생합니다.쿼리는 다음과 같습니다.

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

데이터의 동일한 ResourceID에 대해 동일한 DateReferred 값이 있는 경우 원하는 대로 작동하지 않을 수 있습니다.해당 상황에 대한 비즈니스 규칙을 마련하고 이에 맞게 쿼리를 변경해야 합니다.또한 AssessmentXResource 행에 대한 평가, 계획 및 사례 테이블에 일치하는 행이 있다는 것이 보장되지 않는 경우 이는 쿼리와 약간 다르게 작동합니다.ARQ2에 조인을 추가하여 작동하게 할 수 있지만 이는 성능에 영향을 미치고 조금 더 복잡해집니다.필요한 경우 댓글을 게시해 주세요. 제가 처리하도록 쿼리를 변경하거나 직접 알아내실 수도 있습니다.

짧은 답변 : ID로 그룹화하는 경우 최대 기능이 작동하지 않습니다. 각각의 고유 한 ID에 대한 최대 값을 반환하게됩니다. 즉, 모든 것

하위 쿼리 표현을 변경해야 할 수도 있지만 아이디어를 얻습니다.

val = (테이블에서 max (val)를 선택하는 테이블에서 id, val을 선택하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top