MySQL积累了几个月的差距

时间:2012-06-15 11:15:38

标签: mysql sum

我正在尝试为下表建立累计数月;

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

这很好但是在没有记录的月份,我得不到任何金额。 我想用最后一个“已知”值填补空白。

我的猜测是,我需要创建一个引用一年中每个月的临时表,然后加入它,但我无法正确解决这个问题。

你有什么想法吗?

谢谢

1 个答案:

答案 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不会总是选择相同的订单。