sql - 每行 SQL 计数连续天数
问题描述
希望获得每行的“总连续天数”。
Shift 表包含 ShiftId、ClientID、ServiceId 和 ProviderID ShiftDetails 表有日期。
可以有多个班次具有相同的 ShiftId、ClientID、ServiceId 甚至可以有重复的日期。
想要进行多个“连续总天数”计算。每个 ClientID 的连续天数 每个 ClientID 和 ServiceID 的连续天数 每个 ClientID 、 ServiceID 和 ProviderID 的连续天数。
解决方案
这是一个差距和孤岛问题。您可以通过从日期中减去一系列整数来识别岛屿——恒定的差异识别相邻的日期。然后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