Создание промежуточного итога, сгруппированного по оценке оператора

Используя эту статью, я реализовал запрос, который определяет интервалы упаковки для пользовательских событий:

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;
Другие вопросы по тегам