2016-06-16 2 views
-3
id date value 
------------------ 
1 1  null 
1 2  a 
1 3  b 
1 4  null 
2 1  null 
2 2  null 
2 3  null 
2 4  null 
2 5  null 

모든 ID의 값이 null 인 경우 해당 ID의 최대 날짜와 값이있는 경우 최대 값 id가있는 경우.사례 보고서 : SQL Server

필요한 출력은 :이 유형의 문제에 대한

id date value 
----------------- 
1 3   b 
2 5  null 
+0

질문은 무엇인가 : 당신은 우선 순위를 정의하기 위해 CASE 식을 만들 수 있습니까? –

+0

T-SQL의 '사례'는 ** 표현식 ** ('a + b'와 유사)입니다. –

답변

1

일반적인 방법은 row_number()입니다.

select id, 
    date, 
    value 
from (
    select id, 
     date, 
     value, 
     row_number() over (partition by id order by case when value is not null then 1 else 2 end asc, date desc) rn 
    from UnnamedTable 
    ) t1 
where t1.rn = 1 
0

Sql Fiddle Demo

WITH cte as (
    SELECT id, 
      [date], 
      [value], 
      ROW_NUMBER() OVER (PARTITION BY [ID] ORDER BY [value] DESC, [date] DESC) as rn 
    FROM Table1 
) 
SELECT * 
FROM cte 
WHERE rn = 1 
관련 문제