我有一个表,我们称它为UserTable。
我想做的是:
最终结果应如下:
我将其归结为:
UPDATE UserTable
SET EndDate = GETDATE()-1
WHERE EndDate IS NULL AND StartDate < (GETDATE()) AND
(UserID) in (
select UserID
from UserTable
group by UserID
having count(*) > 1)
我唯一不知道的事情是如何仅更新具有最旧StartDate的那个。根据上面的代码,找到的所有记录都会更新。
答案 0 :(得分:0)
我不确定为什么只想更新一条记录。但是,一种方便的方法是使用可更新的CTE:
with toupdate as (
select ut.*,
row_number() over (partition by userid order by startdate) as seqnum
from UserTable ut
)
update toupdate
set EndDate = dateadd(day, -1, getdate())
where seqnum = 1;