您可以通过巧妙地使用窗口功能来做到这一点。考虑以下:
select name, date, row_number() over (partition by name order by date)from t
这将添加一个行号,在您的示例中该行号将简单地为1、2、3、4、5。现在,取与日期的差值,并且该组具有一个恒定值。
select name, date, dateadd(d, - row_number() over (partition by name order by date), date) as valfrom t
最后,您需要顺序的组数。我还将添加一个组标识符(例如,以区分最后两个)。
select name, date, count(*) over (partition by name, val) as NumInSeq, dense_rank() over (partition by name order by val) as SeqIDfrom (select name, date, dateadd(d, - row_number() over (partition by name order by date), date) as val from t ) t
不知何故,我错过了有关工作日和节假日的部分。此解决方案不能解决该问题。



