创建按语句评估分组的 运行 总数
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;
通过这篇文章,我实现了一个确定用户事件打包间隔的查询:
http://www.itprotoday.com/microsoft-sql-server/new-solution-packing-intervals-problem
我得到了以下输出:
因此它应该是:
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;