SQL MAX(列)带附加标准

时间:2013-01-04 17:52:39

标签: sql sql-server

我有一个表,我想在其中返回由另一个标识符组成的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

我可以想办法蛮力这个,但我想看看我是否可以在一次查询中做到这一点。

1 个答案:

答案 0 :(得分:7)

SQL Fiddle Demo

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