我有一个表,我想在其中返回由另一个标识符组成的MAX(id)列表。但是,我有第三列,当它符合某个标准时,“胜过”不符合该标准的行。
可能更容易用一个例子来解释。样本表有:
UniqueId(int) GroupId(int) IsPriority(位)
原始数据:
UniqueId GroupId IsPriority
-----------------------------------
1 1 F
2 1 F
3 1 F
4 1 F
5 1 F
6 2 T
7 2 T
8 2 F
9 2 F
10 2 F
因此,因为groupId 1中没有行设置了IsPriority,所以返回最高的UniqueId(5)。由于groupId 2具有设置了IsPriority的行,因此我们返回具有该值的最高UniqueId(7)。
因此输出将是:
5
7
我可以想办法蛮力这个,但我想看看我是否可以在一次查询中做到这一点。
答案 0 :(得分:7)
WITH T
AS (SELECT *,
ROW_NUMBER() OVER (PARTITION BY GroupId
ORDER BY IsPriority DESC, UniqueId DESC ) AS RN
FROM YourTable)
SELECT UniqueId,
GroupId,
IsPriority
FROM T
WHERE RN = 1