0

我正在尝试为下表建立几个月的累积总和;

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

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

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

你有什么想法 ?

谢谢

4

1 回答 1

0

是的,您的猜测是处理此问题的一种方法。

创建一个(临时甚至更好:永久)表,每个月有一行,比如每个月的最后一天。然后使用LEFTjoin,类似于:

FROM 
        month_table AS mo 
    LEFT JOIN 
        table AS ta 
            ON  LAST_DAY(ta.created_at) = mo.last_day

如果您希望您的查询能够正常工作(而不仅仅是偶然地正常),那么您应该真正注意的另一件事是添加一个排序。当您希望表格处理某个订单时,请始终使用ORDER BY- 并且“cumultive sum”表明您不想要随机订单。除非您指定,否则 DBMS 不会总是选择相同的顺序。

于 2012-06-15T11:24:32.393 回答