以下のテーブル(tableA)があったときに、tableBのように日付がないところを埋めてさらに累積の値で埋めたいです。
tableA
dt | 購入金額 | 累積購入金額 | 地域 |
---|---|---|---|
1/3 | 10 | 10 | 岩手 |
1/4 | 10 | 20 | 岩手 |
1/6 | 10 | 30 | 岩手 |
tableB
dt | 購入金額 | 累積購入金額 | 地域 |
---|---|---|---|
1/1 | 0 | 0 | 岩手 |
1/2 | 0 | 0 | 岩手 |
1/3 | 10 | 10 | 岩手 |
1/4 | 10 | 20 | 岩手 |
1/5 | 0 | 20 | 岩手 |
1/6 | 10 | 30 | 岩手 |
以下のコードを書いたのですが、どういうわけか連続の日ではなくなってしまいます。
どうすればtableBを作れるのでしょうか。
lang
1with 2dt_table AS ( 3SELECT 4 ('2018-01-01'::date + (ROW_NUMBER() OVER()) - 1)::date AS dt 5FROM 6 table -- 適当なテーブルを指定 7limit 8 366 9) 10SELECT 11 d.dt, 12 COALESCE(t.購入金額, 0) AS 購入金額, 13 (CASE WHEN t.累積購入金額 IS NULL THEN COALESCE(MAX(t.累積購入金額) OVER(PARTITION BY t.地域 ORDER BY d.dt ROWS UNBOUNDED PRECEDING), 0) ELSE t.累積購入金額 END) AS 累積購入金額, 14 (CASE WHEN t.地域 IS NULL THEN COALESCE(MAX(t.地域) OVER(PARTITION BY t.地域 ORDER BY d.dt ROWS UNBOUNDED PRECEDING), 0) ELSE t.地域 END) AS 地域 15FROM 16 dt_table d 17 LEFT JOIN tableA t 18 ON d.dt = t.dt

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/01 15:14
2018/08/01 15:22
2018/08/01 15:28 編集
2018/08/01 15:31
2018/08/01 15:37
2018/08/01 15:42
2018/08/01 15:45
2018/08/01 15:50
2018/08/01 16:10 編集
2018/08/01 16:10
2018/08/01 16:17
2018/08/01 16:27
2018/08/01 16:30
2018/08/01 23:05 編集
2018/08/02 00:00
2018/08/02 03:04
2018/08/02 03:31 編集
2018/08/02 03:11
2018/08/02 03:57
2018/08/02 04:23
2018/08/02 14:33