我想要实现的目标是:在用户状态为“有效”的日期,将接下来的5个日期的状态设置为“幻影”(或其他任何内容)。
在:
UserID Date Status
000001 01-01-17 null
000001 02-01-17 Active
000001 03-01-17 null
000001 04-01-17 null
000001 05-01-17 null
000001 06-01-17 null
000001 07-01-17 null
000001 08-01-17 null
000001 09-01-17 Active
000001 10-01-17 null
后:
UserID Date Status
000001 01-01-17 null
000001 02-01-17 Active
000001 03-01-17 Phantom
000001 04-01-17 Phantom
000001 05-01-17 Phantom
000001 06-01-17 Phantom
000001 07-01-17 null
000001 08-01-17 null
000001 09-01-17 Active
000001 10-01-17 Phantom
我试图从两个角度来解决这个问题: a)作为一个循环,它将检查在前面的X行中是否存在“活动”值 b)选择状态为“活动”的行和后面的X行进入临时表并随后加入
我认为它应该是一种检查“日期和日期+ X之间是否存在值X”的方法,但到目前为止我没有实现这一目标。
非常感谢有关如何实现这一目标的帮助! (MSSQL)
答案 0 :(得分:0)
最终我设法找到了解决方案。两个步骤。首先,我创建一个临时表(#active_dates),其中我只放置具有“活动”状态的行。然后,我运行以下脚本:
update table_name
set status='Phantom'
from #active_dates as a
where a.userid=table_name.userid and
(table_name.[date] between a.[date] and dateadd(day,5,a.[date])) and
(table_name.status is null)
其中5只是'Active'之后的一些行,想要更新。
感谢您抽出时间阅读本文。 :)