创建按语句评估分组的 运行 总数

Creating a running total grouped by a statement evaluation

通过这篇文章,我实现了一个确定用户事件打包间隔的查询:

http://www.itprotoday.com/microsoft-sql-server/new-solution-packing-intervals-problem

我得到了以下输出: 但是,我无法理解的一点是如何按每个日期的 userId 对打包间隔进行分组。基本上,我需要在末尾有一个组列,当 isStart 为 1 时每行递增,但当 isStart 为 null 时输出与前一行相同。

因此它应该是:

Row 1: 1
Row 2: 2
Row 3: 2
Row 4: 3
Row 5: 4
Row 6: 5
Row 7: 6
Row 8: 7
Row 9: 8
Row 10: 9
Row 11: 9
Row 12: 9
Row 13: 10

...等等

这样我就可以检索每个组的最小开始时间和最大结束时间。我敢肯定这很明显,但我似乎无法发现它!

只需使用累计和:

select t.*,
       sum(isStart) over (order by start) as grp
from t;