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

はい、あなたの推測はこれを処理する 1 つの方法です。

毎月の最終日など、月に 1 つの行を持つ (一時的またはさらに良い: 永続的な) テーブルを作成します。次にLEFT、次のようなもので join を使用します。

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

クエリを正常に動作させたい場合 (偶然だけでなく)、本当に注意する必要があるもう 1 つのことは、順序付けを追加することです。テーブルを何らかの順序で処理する場合は常に使用ORDER BYします。「cumultive sum」は、ランダムな順序を望まないことを示唆しています。指定しない限り、DBMS は常に同じ順序を選択するとは限りません。

于 2012-06-15T11:24:32.393 に答える