使用本文,我实现了一个确定用户事件的打包间隔的查询:
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
...等
这允许我检索每个组的最小开始和最大结束。我确信这很明显,但我似乎无法发现它!
答案 0 :(得分:1)
只需使用累计金额:
select t.*,
sum(isStart) over (order by start) as grp
from t;