当行的值为X(SQL表)

时间:2017-12-04 09:28:38

标签: sql sql-server

  • 该表有三列。 (1)用户ID,(2)日期,(3)状态。
  • 有X个用户,每个用户的状态都有相同的日期范围记录。
  • 状态(当前)为“活动”或空。
  • 可能是该行中有5个“活跃”天,或者它们之间可能有20天。

我想要实现的目标是:在用户状态为“有效”的日期,将接下来的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)

1 个答案:

答案 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'之后的一些行,想要更新。

感谢您抽出时间阅读本文。 :)