1

2 つのテーブルがあります。1 つは初期評価用、もう 1 つは再評価用です。形式は次のとおりです。

initialAssessment:

  • assessmentId
  • personId
  • assessmentDate
  • totalScore

Reassessments:

  • assessmentId
  • personId
  • assessmentDate
  • totalScore

各テーブルには、1 人あたり 1 つのレコードが含まれます。最新の評価が再評価表に含まれていない可能性があります。そのため、2 つのテーブルから最新の評価を選択し、特定の人の対応する合計スコアを選択する必要があります。次のクエリを試しましたが、複数の行が取得されます。

 SELECT personId, MAX(assessmentDate) AS maxSubmittedDt, TotalScore
 FROM (
    SELECT personId, assessmentDate, TotalScore
    FROM  initialAssessment
    WHERE personId = 1
    UNION
    SELECT personId, assessmentDate, TotalScore
    FROM Reassessments
    WHERE personId = 1) AS u
 Group BY personId, TotalScore
 Order By personId

私の質問は、最初の評価表と再評価表の間で最新の評価とそれに対応するスコアを選択するにはどうすればよいですか? 問題があれば、SQL サーバー 2005 を使用しています。

4

3 に答える 3

3
SELECT personId, assessmentDate, TotalScore
FROM (
     SELECT personId, assessmentDate, TotalScore, ROW_NUMBER() OVER (Partition by personId Order by assessmentDate desc) as RowId
     FROM (
        SELECT personId, assessmentDate, TotalScore
        FROM  initialAssessment
        WHERE personId = 1
        UNION
        SELECT personId, assessmentDate, TotalScore
        FROM Reassessments
        WHERE personId = 1
      ) a
) b
WHERE RowId = 1

このようなものになります。

http://www.codeproject.com/Articles/308281/How-to-Use-ROW_NUMBER-to-Enumerate-and-Partition-R

于 2012-12-16T00:42:46.300 に答える
0

ネストされたユニオンから作成したエイリアス「u」がSQLに適用されていないことに気付きました。また、主な選択は、以下のGroupByで適用されているpersonIdを適用していません。次のことを試してください。

SELECT u.personId AS offenderCD, MAX(u.assessmentDate) AS maxSubmittedDt, u.TotalScore
FROM (
SELECT personId, assessmentDate, TotalScore
FROM  initialAssessment
WHERE personId = 1

UNION

SELECT personId, assessmentDate, TotalScore
FROM Reassessments
WHERE personId = 1) AS u
Group BY u.personId, u.assessmentDate, u.TotalScore
Order By u.personId
于 2012-12-14T22:44:02.650 に答える
0

1 人の人物のみをクエリする場合は、TOP (n) + ORDER BY を使用できます。

SELECT TOP (1) personId, assessmentDate, TotalScore
FROM (
    SELECT personId, assessmentDate, TotalScore
    FROM  initialAssessment
    WHERE personId = 1
    UNION
    SELECT personId, assessmentDate, TotalScore
    FROM Reassessments
    WHERE personId = 1) AS u
) s
ORDER BY assessmentDate DESC
;

ただし、 @Brian White の提案は、1 つのクエリで何人の結果を取得するかに関係なく適用できます。

于 2012-12-16T01:25:37.580 に答える