You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS SQL:如何按最大行号更新CANDIDACY表的CUR_CAND列?

MS SQL 实现按ID分组标记最大RowNum记录为当前记录

方法一:分两步更新(先统一设为N,再标记最大行)

  1. 先将所有记录的CUR_CAND设为N:
UPDATE CANDIDACY
SET CUR_CAND = 'N'
  1. 找到每个ID分组中RowNum最大的行,将其CUR_CAND设为Y:
UPDATE c
SET CUR_CAND = 'Y'
FROM CANDIDACY c
INNER JOIN (
    -- 子查询获取每个ID的最大RowNum
    SELECT ID, MAX(RowNum) AS MaxRowNum
    FROM CANDIDACY
    GROUP BY ID
) m ON c.ID = m.ID AND c.RowNum = m.MaxRowNum

方法二:一步到位更新(使用CASE语句)

无需先统一设为N,直接通过关联子查询判断每行是否为当前ID的最大RowNum记录:

UPDATE c
SET CUR_CAND = CASE 
    WHEN c.RowNum = m.MaxRowNum THEN 'Y' 
    ELSE 'N' 
END
FROM CANDIDACY c
JOIN (
    SELECT ID, MAX(RowNum) AS MaxRowNum
    FROM CANDIDACY
    GROUP BY ID
) m ON c.ID = m.ID

方法三:使用CTE(公共表表达式)

CTE写法更清晰,适合复杂场景:

WITH MaxRowPerID AS (
    SELECT ID, MAX(RowNum) AS MaxRowNum
    FROM CANDIDACY
    GROUP BY ID
)
UPDATE c
SET CUR_CAND = 'Y'
FROM CANDIDACY c
JOIN MaxRowPerID m ON c.ID = m.ID AND c.RowNum = m.MaxRowNum

注意事项

  • 确保RowNum在每个ID分组内是唯一的,避免同一ID出现多个最大RowNum导致多条记录被标记为Y。
  • 如果你的临时表是局部临时表(仅当前会话可见),记得表名前加#,比如#CANDIDACY。

内容的提问来源于stack exchange,提问作者rjohns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:15:38