Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
案例语句:SQL Server_Sql_Sql Server 2008_Sql Server 2012 - Fatal编程技术网

案例语句:SQL Server

案例语句: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中的值为空,则该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   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