0

次のデータを使用して、以下の「X」でマークされたレコードのみを取得する SQL サーバー クエリを作成するにはどうすればよいですか? 基本的に、類似したレコードのグループごとに MAX 日付のレコードが必要です。以下に 2 つのグループがあります。1 つ目は KEY1 にのみデータがあり、2 つ目は KEY1 と KEY2 の両方にデータがあります。OVER ステートメントを使用してみましたが、必要なものを取得できました。ありがとう。

日付------キー1------キー2

01-1月......abc........NULL

02-Jan......def........NULL 'X'

2月12日……abc…………123

2月14日……abc……456「X」

そこで、より現実的なデータセットを使用して問題を言い換えます。

行日付率 Key1 Key2 Key3

1 01-1 月 150 12345  
2 05-1 月 155 12345     
3 01-1 月 160 12345 J100
4 07-2 月 170 12345 J100
5 09-1 月 170 12345 K200
6 14-150 12345 J100 ABC
7 175 12345 J100 ABC 1月23日

取得したい行は 2、4、5、および 7 です。これらはそれぞれ、3 つのキー列の一意の組み合わせごとの最大日付を表しているからです。それがより理にかなっていることを願っています。ありがとう。

4

2 に答える 2

0
select distinct LAST_VALUE(date) over (partition by key1, key2, key3 order by date) date,
                LAST_VALUE(rate) over (partition by key1, key2, key3 order by date) rate,
                LAST_VALUE(key1) over (partition by key1, key2, key3 order by date) key1,
                LAST_VALUE(key2) over (partition by key1, key2, key3 order by date) key2,
                LAST_VALUE(key3) over (partition by key1, key2, key3 order by date) key3
from t1

ただし、これは SQL Server 2012 でのみ機能することに注意してください。

他のバージョンでは

  select t1.* 
    from t1, (select key1, key2, key3, max(date) date from t1 group by key1, key2, key3)) t2
where t2.key1 = t1.key1 and t2.key2 = t1.key2 and t2.key3 = t1.key3 and t2.date = t1.date
于 2013-10-24T00:01:04.480 に答える