0

SQL Server 2000 で記述された複雑なクエリがあり、一部に派生テーブルへの結合が含まれています。残念ながら、基になるデータが私が期待したものと異なるため、このテーブルは私が望んでいたとおりには返されません。データが次のようになっているとします。

USERID,OS,DATEINSTALLED
237,win,01/01/1980
237,dos,01/02/1978
237,lin,08/08/2002
132,win,03/03/1982
132,dos,03/07/2002
132,mac,03/07/2002

次に、私のクエリは次のようになりました。

SELECT USERID, DATEINSTALLED = max(DATEINSTALLED)
FROM INSTALLATIONS
GROUP BY USERID

結果セットは次のようになります

237,08/08/2002
132,03/07/2002

しかし、私が必要とするのは、次の結果セットです。

237,lin,08/08/2002
132,dos,03/07/2002

また

237,lin,08/08/2002
132,mac,03/07/2002

それが mac や dos をピックアップするかどうかはあまり気にしませんが、3 行を表示してはいけません。userid私が必要としているのは、その組み合わせに対して最大日付と「a」有効なOSを含む、1行あたり1行です。したがって、mac または dos は有効ですが、win は有効ではありません (ユーザー 132 の場合)。

これはより複雑なクエリの一部としての派生テーブルであるため、実行時間のために可能な限りクリーンでシンプルに保つ必要があります (ソース テーブルのサイズは数十万行です)。タグで暗示されているように、私は SQL Server 2000 に限定されています。

4

1 に答える 1

4

これを試して:

SELECT USERID, OS, DATEINSTALLED
FROM INSTALLATIONS
JOIN (
   SELECT USERID, DATEINSTALLED = max(DATEINSTALLED)
   FROM INSTALLATIONS
   GROUP BY USERID
) AS T
ON INSTALLATIONS.USERID = T.USERID AND INSTALLATIONS.DATEINSTALLED = T.DATEINSTALLED
于 2012-04-23T13:57:08.663 に答える