2013-01-04 2 views
3

입니다. 다른 식별자로 GROUP 된 MAX (id)의 목록을 반환하려는 단일 테이블이 있습니다. 그러나 특정 기준을 충족하면 그 기준을 충족시키지 못하는 행을 "trumps"하는 세 번째 열이 있습니다.SQL (MAX) (컬럼) 추가 기준이

예를 들어 설명하기가 쉽습니다. 샘플 테이블이 있습니다

가 UniqueID (INT) 는 그룹 ID (INT) IsPriority (비트)

원시 데이터 :의 groupId 1에는 행 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 

그래서, 우리는 반환 가장 높은 UniqueId (5). groupId 2에는 IsPriority가 설정된 행이 있으므로이 값 (7)으로 가장 높은 UniqueId를 반환합니다.

그래서 출력은 다음과 같습니다

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