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

如何更新指定PersonID下非最新地址记录的IsCurrentAddress字段

批量更新非最新地址的IsCurrentAddress字段

示例数据集

IDPersonIDPersonNameAddressIsCurrentAddressCreatedDateTime
120James123 Peach StY3/1/2023
220James2844 Hollander RdY10/14/2023
35Alexa846 Anytown WayY5/23/2022
45Alexa374 Wayward BlvdY1/6/2023
55Alexa927 Beachnut StY9/4/2023

需求说明

Alexa和James搬家后新增了地址记录,现在需要把每位用户非最新地址的IsCurrentAddress字段设为'N',也就是要更新ID为1、3、4的记录。之前找到的方案大多是查询逻辑,没有合适的更新操作方案,这里提供两种可行的SQL更新方案:

方案一:用ROW_NUMBER()筛选最新地址ID

UPDATE Addresses 
SET IsCurrentAddress = 'N'
WHERE ID NOT IN (
    SELECT ID
    FROM (
        SELECT ID, PersonID, CreatedDateTime,
               -- 按用户分组,地址创建时间倒序排序,最新地址标记为1
               ROW_NUMBER() OVER (PARTITION BY PersonID ORDER BY CreatedDateTime DESC) AS rn
        FROM Addresses
    ) AS ranked_addresses
    WHERE rn = 1
)

逻辑:先给每个用户的地址按创建时间倒序排名,取出排名为1的最新地址ID,再更新不在这个ID列表里的所有记录,将它们的IsCurrentAddress设为'N'。

方案二:用EXISTS判断是否存在更新地址

UPDATE Addresses a
SET IsCurrentAddress = 'N'
WHERE EXISTS (
    -- 检查同一个用户是否有比当前记录创建时间更晚的地址
    SELECT 1
    FROM Addresses b
    WHERE b.PersonID = a.PersonID
    AND b.CreatedDateTime > a.CreatedDateTime
)

逻辑:直接判断当前地址是否不是用户的最新地址——如果同一个用户存在创建时间更晚的地址,就把当前地址的IsCurrentAddress设为'N',写法更简洁。

内容的提问来源于stack exchange,提问作者Etienne Pierre-Jerome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:12:05