案例语句:SQL Server
如果所有id中的值为空,则该id的最大日期,如果我们有值,则值为id的最大日期 所需输出为:案例语句:SQL Server,sql,sql-server-2008,sql-server-2012,Sql,Sql Server 2008,Sql Server 2012,如果所有id中的值为空,则该id的最大日期,如果我们有值,则值为id的最大日期 所需输出为: 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 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 date value
-----------------
1 3 b
2 5 null
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
你的问题是什么?CASE
在T-SQL中是一个表达式(比如a+b
)-不是一个语句。。。。
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