1

私は次の表を持っています

RecordID     Group     Date        Value
----------------------------------------
 1           Test 1   1/01/2012     10
 2           Test 1   1/01/2012     10
 3           Test 1   1/01/2012     20
 4           Test 2   1/01/2012     20
 5           Test 1   2/01/2012     10
 6           Test 2   2/01/2012     30
 7           Test 1   2/01/2012     20
 8           Test 1   2/01/2012     20
 9           Test 2   2/01/2012     20
10           Test 1   3/01/2012     10
11           Test 2   3/01/2012     10
12           Test 2   3/01/2012     20
13           Test 3   3/01/2012     10
14           Test 1   4/01/2012     10

すべてのRecordIdを取得する必要があります。同じ日付と同じグループの場合、値が最も低く、同じ日付とグループの値が大きいすべてのレコードを無視します。したがって、クエリは「date」と「group」でグループ化し、値が最も低いレコードを見つける必要があります。つまり、結果は次のようになります。

RecordIds:1、2、4、5、9、10、11、13、14

4

1 に答える 1

7

サブクエリでランクを使用できます。

select T.RecordID,
       T.[Group],
       T.Date,
       T.Value
from 
  (
    select RecordID,
           [Group],
           Date,
           Value,
           rank() over(partition by [Group], Date order by Value) as rn
    from YourTable
  ) as T
where T.rn = 1
order by T.RecordID

SQLフィドル

于 2012-10-08T05:27:26.613 に答える