第x行之差递增整数

zu0ti5jz  于 2021-08-01  发布在  Java
关注(0)|答案(1)|浏览(349)

我有一个sql server的场景,非常感谢您的帮助。我有4列(id到rownum)和1列(bindex)要计算。具体如下

  1. ID StartDate EndDate rownum bindex
  2. A 27/06/2020 12:00 27/06/2020 16:48 1 1
  3. A 27/06/2020 16:48 27/06/2020 21:36 2 1
  4. A 02/07/2020 09:36 04/07/2020 09:36 3 2
  5. A 06/07/2020 09:36 06/07/2020 21:36 4 3
  6. A 06/07/2020 22:00 06/07/2020 23:58 5 3
  7. A 07/07/2020 09:36 07/07/2020 21:36 6 3
  8. A 08/07/2020 09:36 09/07/2020 09:36 7 3
  9. A 11/07/2020 09:36 12/07/2020 09:36 8 4

我要做的是将bindex变量增加1,其中x行的startdate+1-x行的enddate>=1。第一条记录的bindex值为1,然后将其余所有行的bindex值增加1,直到找到另一个break>=1天。
在cte或简单的循环结构中,有什么简单的方法可以做到这一点吗?
非常感谢

tsm1rwdh

tsm1rwdh1#

使用 lag() 和一个累积的总和:

  1. select t.*,
  2. sum(case when prev_enddate >= dateadd(day, -1, startdate) then 0 else 1 end) over (partition by id order by rownum) as bindex
  3. from (select t.*, lag(enddate) over (partition by id order by rownum) as prev_enddate
  4. from t
  5. ) t;

相关问题