每行sql计数连续天数

ugmeyewa  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(347)

希望得到“总连续天数”每行。
shift表包含shiftid、clientid、serviceid和providerid shiftdetails表包含日期。
同一shiftid、clientid、serviceid可以有多个班次,甚至可以有重复的日期。
希望有多个“总连续天数”计算。每个clientid连续天数每个clientid和serviceid连续天数每个clientid、serviceid和providerid。
sql小提琴

l7wslrjt

l7wslrjt1#

这是一个缺口和孤岛问题。您可以通过从日期中减去一系列整数来识别孤岛——常数差表示相邻日期。然后使用 count(*) 作为窗口函数:

select t.*,
       count(*) over (partition by clientid, serviceid, dateadd(day, -seqnum, date)) as consecutive_days
from (select t.*,
             row_number() over (partition by clientid, serviceid order by date) as seqnum
      from t
     ) t

相关问题