2012-04-23 16 views
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 

その後、私のクエリはように見えた:

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

の結果セットを与えるしかし、私が必要とすることは、結果セットであるだろう

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

をof:

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

または

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

私はそれがMacやDOSをピックアップしても大したことではありませんが、3行を与えてはいけません。私が必要とするのはuseridごとに1行であり、最大の日付とその組み合わせの有効なOS「a」です。したがって、MacまたはDOSは有効ですが、勝利は(ユーザー132のために)ありません。

より複雑なクエリの一部としての派生テーブルであるため、実行時間(ソーステーブルのサイズは数十万行)のため、できるだけクリーンでシンプルに保つ必要があります。私はこのお試しくださいSQL Serverの2000

答えて

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 
+0

を、派生テーブルは、派生テーブルが必要になります。私はこれを、次の1時間か2時にうまくいけば行きます。 – Paul

+0

返信いただきありがとうございますが動作しません。あなたの答えは正しいと確信しています。私の質問は、私が実際に尋ねようとしていたものであること、つまり、2つの基準に合致する有効なOSを持つユーザIDと日付ごとに1行が必要なことを更新しました。 – Paul

+0

最後にソートされましたが、実際のクエリはこの時点で私に頭痛を与えています。私がしたことはあなたの答えに似ていますが、 "OS"を "OS = MAX(OS)"に置き換えています。基本的に私が持っていた元の論理を入れ子にして繰り返します。 – Paul

関連する問題