#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. Спасибо! Идея иметь совокупный подсчет нагрузки была очень полезной. Использование этого в качестве идентификатора того, какой тип транзакции относится к определенной нагрузке, позволило мне агрегировать данные по мере необходимости!