前提・実現したいこと
取引テーブル(tx)を元に毎日その日のユニークユーザー(UU)数とその日までの通算のUU数をpostgresqlで集計したいです。
元となるデータ
| id | user_id | date |
|---|---|---|
| 1 | 1 | 1970-01-01 |
| 2 | 1 | 1970-01-01 |
| 3 | 2 | 1970-01-01 |
| 4 | 3 | 1970-01-01 |
| 5 | 4 | 1970-01-02 |
| 6 | 5 | 1970-01-02 |
| 7 | 1 | 1970-01-02 |
| 8 | 2 | 1970-01-03 |
| 9 | 6 | 1970-01-03 |
期待する結果
| 年月日 | 日別UU | 通算UU |
|---|---|---|
| 1970-01-01 | 3 | 3 |
| 1970-01-02 | 3 | 5 |
| 1970-01-03 | 2 | 6 |
通算UUでは、それぞれの日までに取引実績がある人のユニーク数を算出したいです。
1970-01-01までに3人(1,2,3)、1970-01-02までに5人(1,2,3,4,5)、1970-01-03までに6人(1,2,3,4,5,6)というのを求めたいです。
発生している問題・エラーメッセージ
Error running query: DISTINCT is not implemented for window functions
該当のソースコード
sql
1SELECT 2date 3, count(distinct user_id) over(ORDER BY date) 4FROM tx 5GROUP BY date 6ORDER BY date ASC
試したこと
上記コードはウィンドウ関数でdistinctが使えないため不可ということで色々調べたりしましたが、日毎に通算を算出する方法がわかりませんでした。
期待する通算UUは3,5,6となっていますが、3,6,8ではないのですか?
すみません。補足が遅くなりました。teratailで質問するのは初めてでこんなに早く回答をいただけるものとは思っていませんでした。すごいですね。
通算UUの期待する結果は3,5,6です。
それぞれの日までに取引実績がある人のユニーク数を算出したかったので。その説明をちゃんと書くべきでしたね。
1970-01-01までに3人(1,2,3)、1970-01-02までに5人(1,2,3,4,5)、1970-01-03までに6人(1,2,3,4,5,6)というのを求めたいです。
時間かかってしまいますがいただいている回答を1つずつ確認します。