3

我有一个表,我想返回一个由另一个标识符分组的 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 的行,因此我们返回具有该值 (7) 的最高 UniqueId。

所以输出将是:

5
7

我可以想办法强制执行此操作,但我想看看是否可以在单个查询中执行此操作。

4

1 回答 1

7

SQL 小提琴演示

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 
于 2013-01-04T17:56:57.783 回答