Агрегирование данных между наступлением двух событий

#mysql #sql

Вопрос:

У меня есть такие данные:

Дата Тип Сумма
1/1/21 Загрузка 40.00
1/2/21 Тратить -20.00
1/3/21 Вывод средств -10.00
1/4/21 Загрузка 40.00
1/5/21 Тратить -20.00
1/5/21 Тратить -15.00
1/6/21 Загрузка 40.00

Что я хотел бы сделать, так это получить такой результат:

Дата Загрузки Тип Сумма
1/1/21 Тратить -20.00
1/1/21 Вывод средств -10.00
1/4/21 Тратить -35.00

Я хочу объединить сумму денег, выделенную для каждого типа транзакции, между двумя строками, которые были разных типов.

Как бы я сделал это в SQL?

Комментарии:

1. Какая версия MySQL? (Почему это также помечено как vertica?)

Ответ №1:

Если я правильно понимаю, вы можете создать совокупный подсчет нагрузки, а затем агрегировать:

 select min(load_date), type, sum(amount)
from (select t.*,
             sum(case when type = 'load' then 1 else 0 end) over (order by load_date) as load_grp
      from t
     ) t
where type <> 'load'
group by load_grp;
 

Тем не менее, ваши результаты больше похожи на агрегированные по дате и типу для событий без нагрузки:

 select load_date, type, sum(amount)
from t
where type <> 'load'
group by load_date, type;
 

Комментарии:

1. Спасибо! Идея иметь совокупный подсчет нагрузки была очень полезной. Использование этого в качестве идентификатора того, какой тип транзакции относится к определенной нагрузке, позволило мне агрегировать данные по мере необходимости!