2012-03-01 22 views
9

私はクエリを書いており、this threadで解決策を使用しましたが、を少しでもで処理しましたが、まだ少し問題があります。SQL - 重複がある場合に最新のレコードを選択

大部分は一意のレコードの束を選択したいが、2回発生するレコードがいくつかある。私は、最新の日付を持つレコードのみを選択できるようにしたい。それは重複を持っているそれらのレコードの最新のレコードを取得しますが、重複を持たないレコードがまったく表示されないように、これは限り働く

SELECT tb1.id,tb1.type,tb1.date 

FROM Table tb1 

WHERE tb1.type = 'A' OR 'B' 
AND tb1.date = (SELECT TOP 1 tb2.date 
       FROM Table tb2 
       WHERE tb2.date = tb1.date 
       ORDER BY tb2.date DESC) 

:これは、これまでのところ、私のクエリです。

ご協力ありがとうございました私はSQLゲームを初めて使っています。それを行うには、いくつかの方法があります

+0

返されていない一意の行のサンプルデータを提供することはできますか? – kaj

+0

あなたは日にちに参加するように見えます。それは意図的なのでしょうか? – kaj

+0

あなたはもっと具体的になりますか?あなたは言った: "私は最新の日付を持っているレコードを選択することができるようにしたい"と後者は "しかし、重複していないそれらのレコードはまったく表示されません" ...私に2つの異なるもののようです。 – Diego

答えて

17

は、一つの方法は、このようなROW_NUMBERを使用することです:

SELECT id, type, date 
FROM 
(
    SELECT tb1.id, tb1.type, tb1.Date, 
     ROW_NUMBER() OVER (PARTITION BY tb1.id ORDER BY tb1.Date DESC) AS RowNo 
    FROM Table tb1 
    WHERE tb1.type IN ('A','B') 
) x 
WHERE x.RowNo = 1 

これはのための最新の日付があり、それぞれ個別のID値を行が返されます。

+0

AdaTheDevありがとうございます、これで問題は解決しましたが、重複がなくなりました。 –

+0

小さな誤字:tb2.Dateはtb1.Dateにする必要があります – Vladimirs

関連する問題