2013-01-04 110 views
3

我有一張表,我想在其中返回一個MAX(id)列表,由另一個標識符分組。然而,我有第三列,當它滿足一定的標準時,「勝過」不符合該標準的行。SQL MAX(column)with Additional Criteria

可能比較容易用一個例子來解釋。樣品表有:

唯一ID(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 

我能想到的辦法蠻力攻擊,但我想看看我是否能在單個查詢做到這一點。

回答

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 
相關問題