kra*_*626 4 sql t-sql sql-server grouping group-by
我有一个表,包含以下列:
PK1 PK2 ID DATE Value flag
Run Code Online (Sandbox Code Playgroud)
我做了一个计算,涉及获取每个ID的最大值.
select id,
max(value)
from table
group by id
Run Code Online (Sandbox Code Playgroud)
我想在我正在使用的行上标记该标志.如果id和max(value)对应多行,则标记具有最大日期的行.如果它们具有相同的id,则max(value)和max(date)标记恰好其中一行(不关心那一点)
有任何想法吗?
谢谢!
Mar*_*ith 10
对于SQL2005 +可能是这样的.(假设"Mark"表示更新标志列)
WITH cte AS
(
SELECT PK1, PK2, ID, DATE, Value, flag,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY value desc, date desc) AS RN
FROM table
)
UPDATE cte
SET flag=CASE WHEN RN=1 THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
使用SQL Server 2005或更高版本,您可以执行以下操作:
SELECT x.*
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY value DESC, date DESC) AS RN
FROM table
) x
WHERE x.RN = 1
Run Code Online (Sandbox Code Playgroud)