Допустим, у меня уже есть количество заказов в день в таблице my_order:
2018-10-01 10
2018-10-02 15
2018-10-03 12
2018-10-04 18
2018-10-05 20
И я хочу получить ежедневный общий подсчет по сумме всех исторических подсчетов, вот так:
2018-10-01 10
2018-10-02 25
2018-10-03 37
2018-10-04 55
2018-10-05 75
Как это сделать в SQL?
В основном MySQL, но я также хочу использовать его во внутреннем SQL, таком как внутренний инструмент, а не в конкретной СУБД.
Это важно, потому что OVER()
не будет доступен до MySQL 8. Если кто-то предоставит вам решение с OVER()
, и вы используете MySQL 5.7, решение будет бесполезным.
Большая часть СУБД поддерживает оконную функцию, поэтому вы можете:
select m.*, sum(cnt) over (order by date)
from my_order m;
Если СУБД не имеет функции окна, вы можете вместо этого использовать подзапрос:
select m.*, (select sum(m1.cnt) from my_order m1 where m1.date <= m.date)
from my_order m;
Спасибо, это именно то, что я хотел.
@ Левин. . . Если это ответ на ваш вопрос, вы должны принять его.
dbms назовите пожалуйста?