У меня есть таблица с 3 столбцами
Create table test
(
Created Datetime
, Flag Bit
, Amount Money
)
, которая выглядит следующим образом
Created Flag Amount
2019-12-01 00:00:00.000 1 50,40
2019-11-21 00:00:00.000 1 50,40
2019-11-06 00:00:00.000 0 50,40
2019-10-04 00:00:00.000 1 50,40
2019-09-08 00:00:00.000 1 50,40
2019-09-01 00:00:00.000 0 50,40
2019-08-04 00:00:00.000 1 50,40
2019-07-24 00:00:00.000 1 50,40
2019-07-23 00:00:00.000 1 50,40
2019-06-01 00:00:00.000 0 50,40
2019-05-05 00:00:00.000 0 50,40
2019-04-25 00:00:00.000 1 50,40
2019-03-11 00:00:00.000 0 50,40
2019-02-03 00:00:00.000 0 50,40
2019-02-02 00:00:00.000 0 50,40
2019-02-01 00:00:00.000 0 50,40
2019-01-31 00:00:00.000 1 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-01 00:00:00.000 1 50,40
Как вы можете видеть, она упорядочена по Created
в порядке убывания.
Представьте, что все эти строки являются Транзакциями. Когда флаг один, у нас есть контрольная точка. Так, например, от строки 20 до 17 - один период (всегда считая от старшего к новому). От строки 17 до 12 - другой период и т. Д.
Обратите внимание, что в строках 9,8 и 7 у нас есть 3 последовательных флага со значением 1
. Когда это происходит, имея последовательные 1 с без 0, я хочу рассматривать все последовательные 1 как группу. Я хочу, чтобы они отображались в виде одной строки с Суммированной суммой и сохраняя их MIN(Created)
.
Например, для строк 9-7 я хочу сгруппировать их в одну строку, где amount
имеет значение151.2
, flag
значение 1
и Created
значение 2019-07-23 00:00:00.000
(min(date)
из трех строк.
Пример вывода этой таблицы будет следующим.
Created Flag Amount
2019-11-21 00:00:00.000 1 100,80
2019-11-06 00:00:00.000 0 50,40
2019-09-08 00:00:00.000 1 100,80
2019-09-01 00:00:00.000 0 50,40
2019-07-23 00:00:00.000 1 151,20
2019-06-01 00:00:00.000 0 50,40
2019-05-05 00:00:00.000 0 50,40
2019-04-25 00:00:00.000 1 50,40
2019-03-11 00:00:00.000 0 50,40
2019-02-03 00:00:00.000 0 50,40
2019-02-02 00:00:00.000 0 50,40
2019-02-01 00:00:00.000 0 50,40
2019-01-31 00:00:00.000 1 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-01 00:00:00.000 1 50,40