Tsql - 使用max和group by获取整行信息

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)


Wil*_*l A 5

使用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)