我正在尝试为下表建立累计数月;
created_at Installs port
2011-02-01 00:00:00 2 7033
2012-02-05 00:00:00 8 7032
2012-03-01 00:00:00 1 7031
2012-05-05 00:00:00 2 8500
2012-06-01 00:00:00 4 7545
我使用以下查询;
SELECT
created_at,
Installs,
@total := @total + Installs AS cumulative
FROM
table, (SELECT @total:=0) AS t
这很好但是在没有记录的月份,我得不到任何金额。 我想用最后一个“已知”值填补空白。
我的猜测是,我需要创建一个引用一年中每个月的临时表,然后加入它,但我无法正确解决这个问题。
你有什么想法吗?
谢谢
答案 0 :(得分:0)
是的,你的猜测是解决这个问题的一种方法。
创建一个(临时的,甚至更好的:永久)表,每个月有一行,比如说每个月的最后一天。然后使用LEFT
加入,例如:
FROM
month_table AS mo
LEFT JOIN
table AS ta
ON LAST_DAY(ta.created_at) = mo.last_day
如果你希望你的查询工作正常 - 而不仅仅是偶然的好 - 你应该真正注意的另一件事是添加一个排序。当您希望处理某个订单时,请始终使用ORDER BY
- 并且“累积总和”表示您不需要randopm订单。除非您指定,否则DBMS不会总是选择相同的订单。