如何在sql中以最小值提取行的id

fen*_*222 1 t-sql sql-server select stored-procedures

我有下表

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
Run Code Online (Sandbox Code Playgroud)

我需要获取所有RecordIds,在同一日期和同一组中它具有最低值,并忽略具有更大价值的相同日期和组的所有记录.所以我的查询需要按"日期"和"组"进行分组,找到值最小的记录,结果应该是:

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

Mik*_*son 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
Run Code Online (Sandbox Code Playgroud)

SQL小提琴