Как получить сумму на каждый день день периода?

Есть данные по транзакциям: приход-расход. Таблица: ид-дата-сумма-тип (приход/расход). Считаю текущий баланс. Все ок. Задача: нужно построить график баланса за период. Допустим с 1 января по 31 декабря, с разбивкой по дням. Не понимаю как правильно сделать. Делать 365 запросов подсчета баланса на каждый день типа SELECT SUM(приход)-SUM(расход) где дата с 01.01 до 02.01, затем с 01.01 до 03.01 и т д? Или все же SQL умеет такую выборку сам сделать?
  • Вопрос задан
  • 507 просмотров
Решения вопроса 1
@Akela_wolf
Extreme Programmer
Все это совершенно неоптимально, так как требуется считать каждый раз с самого начала, но оконные функции решают вашу проблему. Требует MySQL 8 (В MariaDB 10.5 тоже работает, младше не проверял):

CREATE TABLE entries(
  tran_date TIMESTAMP NOT NULL,
  amount INT NOT NULL
);

INSERT INTO entries VALUES ('2022-01-01 00:01:00', 100),
('2022-01-01 01:01:00', 3400),('2022-01-01 02:01:00', -500),
('2022-01-02 00:01:00', 8000),('2022-01-02 01:01:00', -3900),
('2022-01-02 02:01:00', -900);

WITH day_amounts AS (
  SELECT DATE(tran_date) AS day, SUM(amount) AS amount 
  FROM entries 
  GROUP BY DATE(tran_date)
)
SELECT day, SUM(amount) OVER (ORDER BY day) AS balance 
FROM day_amounts;


https://sqlize.online/sql/mariadb/20805610c3da00c2...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы