Агрегировать только смежные записи с T-SQL
У меня есть (упрощенно для примера) таблица со следующими данными
Row Start Finish ID Amount
--- --------- ---------- -- ------
1 2008-10-01 2008-10-02 01 10
2 2008-10-02 2008-10-03 02 20
3 2008-10-03 2008-10-04 01 38
4 2008-10-04 2008-10-05 01 23
5 2008-10-05 2008-10-06 03 14
6 2008-10-06 2008-10-07 02 3
7 2008-10-07 2008-10-08 02 8
8 2008-10-08 2008-11-08 03 19
Даты представляют период времени, идентификатор - это состояние, в котором находилась система в течение этого периода, а сумма - это значение, связанное с этим состоянием.
Что я хочу сделать, это собрать суммы дляпримыкающий строки стак же Идентификационный номер, но сохраняйте ту же общую последовательность, чтобы можно было комбинировать смежные серии. Таким образом, я хочу в конечном итоге с данными, как:
Row Start Finish ID Amount
--- --------- ---------- -- ------
1 2008-10-01 2008-10-02 01 10
2 2008-10-02 2008-10-03 02 20
3 2008-10-03 2008-10-05 01 61
4 2008-10-05 2008-10-06 03 14
5 2008-10-06 2008-10-08 02 11
6 2008-10-08 2008-11-08 03 19
Мне нужно решение T-SQL, которое можно поместить в SP, но я не понимаю, как это сделать с помощью простых запросов. Я подозреваю, что для этого может потребоваться какая-то итерация, но я не хочу идти по этому пути.
Причина, по которой я хочу выполнить это агрегирование, заключается в том, что следующим шагом в процессе является создание SUM () и Count (), сгруппированных по уникальным идентификаторам, которые встречаются в последовательности, так что мои окончательные данные будут выглядеть примерно так:
ID Counts Total
-- ------ -----
01 2 71
02 2 31
03 2 33
Однако если я сделаю простой
SELECT COUNT(ID), SUM(Amount) FROM data GROUP BY ID
На оригинальном столе я получаю что-то вроде
ID Counts Total
-- ------ -----
01 3 71
02 3 31
03 2 33
Что не то, что я хочу.