見出し画像

SQLで累積値や累計を日次で算出する方法

サンプルクエリ

WITH lp_cust AS (
    SELECT DISTINCT 
        customer_id,
        MIN(day) as first_hit
    FROM
        [Page Hitsのテーブル]
    WHERE
    	[抽出条件]
    GROUP BY
        customer_id
)

SELECT
    first_hit as date,
    SUM(uni_viewers) OVER (
        ORDER BY first_hit ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) as cum_viewers
FROM
    (
        SELECT
            first_hit,
            COUNT(DISTINCT customer_id) as uni_viewers
        FROM
            lp_cust
        GROUP BY
            first_hit
    )

説明

lp_custはCustomer IDとそのCustomerが最初に該当のPageを訪れた日の組み合わせを算出したテーブル。
lp_custのデータから、日付毎にCIDをカウントし、その後 SUM(uni_viewers) OVER ( ORDER BY first_hit ASC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) で、first_hitを昇順に並べ、頭行(unbounded preceding)から現在行(current row)までuni_viewersをsumしcum_viewersを求める処理になります。


この記事が気に入ったらサポートをしてみませんか?