@arseny_sitdikov

Как написать SQL-запрос для данной ситуации?

Имеется таблица:
6030a622d4bf0274709275.png
В ней ID это какой-нибудь клиент, Date - дата для клиента, когда по нему была транзакция. Type 1 - Платеж, 0 - списание.
SUM - объем списания(все числа положительные).

Что нужно.
Создать таблицу в которой ID и Date остаются. Но для каждой даты считается сумма всех предыдущих списаний, платежей.

Должно получится что-то такое.
6030a7e940d08781550984.png

MySQL.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 2
LaRN
@LaRN
Senior Developer
Для MSSQL можно так попробовать:
select ID, max([Date]), sum(case [Type] when 1 then [sum] else -1*[sum] end) 
    from table_name
  group by ID
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
MySQL 8
SELECT `user_id`, `date`,
       SUM(IF(`type` = 1, `sum`, -`sum`)) OVER `win` AS `sum`
  FROM `table`
  WINDOW `win` AS (PARTITION BY `user_id` ORDER BY `date`)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@VitalyChaikin
1. Подсчитать суммы по датам
select ID, Date, sum(case [Type] when 1 then [sum] else -1*[sum] end)
2. К исходной таблице делаем LEFT JOIN (1) ON Date <= 1.Date AND id = 1.id
3. Подсчитать суммы по (2)
select ID, Date, sum()
Ответ написан
Комментировать
@Vitsliputsli
Для MySQL <=5.7
select
    id,
    date,
    @s:=(case when type=1 then 1 else -1 end)*sum + (case when @t<>id then (@t:=id)*0 else @s end) sum
from (
    select * from tt order by id,date
) t, (select @t:=1,@s:=0) t2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы