Создание промежуточного итога, сгруппированного по оценке оператора
Используя эту статью, я реализовал запрос, который определяет интервалы упаковки для пользовательских событий:
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
... так далее
Это тогда позволяет мне получить минимальное начало и максимальное окончание для каждой группы. Я уверен, что это действительно очевидно, но я не могу этого заметить!
1 ответ
Решение
Просто используйте накопительную сумму:
select t.*,
sum(isStart) over (order by start) as grp
from t;