SQL2017按Identification分组取time最大值更新register列方案问询
SQL Server 2017 按分组更新register字段实现方案
直接使用窗口函数标记分组内的目标行即可实现需求,针对数千条数据的场景性能完全满足:
第一步:先查询验证逻辑,避免更新错误
SELECT Identification, time, register, CASE WHEN ROW_NUMBER() OVER (PARTITION BY Identification ORDER BY time DESC) = 1 THEN 1 ELSE 0 END AS new_register FROM 你的实际表名;
确认查询结果的new_register字段符合预期后,再执行更新操作。
第二步:执行更新
WITH ranked_data AS ( SELECT register, ROW_NUMBER() OVER (PARTITION BY Identification ORDER BY time DESC) AS rn FROM 你的实际表名 ) UPDATE ranked_data SET register = CASE WHEN rn = 1 THEN 1 ELSE 0 END;
边界情况说明
如果同一个Identification分组下存在多条time值相同且为最大值的行,需要把所有这些行的register都设为1,把代码里的ROW_NUMBER()替换为RANK()即可。
内容的提问来源于stack exchange,提问作者ale
相关产品推荐
相关产品推荐

