2016-06-16 3 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の 'CASE'は**式**(' 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 
関連する問題