1

入力した最新の日付と説明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

確かにシンプルですが、見えません。

4

3 に答える 3

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
于 2009-02-03T19:04:05.420 に答える
0

簡単な答え:IDでグループ化している場合、max関数は機能しません。最終的に、個別のIDごとに最大値が返されます。つまりすべて

サブクエリ表現を変更する必要があるかもしれませんが、あなたはその考えを理解します。

select id、val from table where val =(select max(val)from table)

于 2009-02-03T19:12:23.483 に答える
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

データ内の同じ ResourceID に対して同一の DateReferred 値がある場合、これは期待どおりに動作しない可能性があります。その状況に対応するビジネス ルールを考え出し、クエリを適切に変更する必要があります。また、AssessmentXResource 行の Assessment、Plan、および Case テーブルに一致する行があることが保証されていない場合、これはクエリとは少し異なる動作をします。これらの ARQ2 に結合を追加することで機能させることができますが、パフォーマンスに影響し、少し複雑になります。それが必要な場合は、コメントを投稿してください。クエリを変更して処理するか、自分で理解できるかもしれません。

于 2009-02-03T18:56:21.957 に答える