#やりたいこと
以下のテーブル
login
ID | user_id | login_time |
---|---|---|
1 | 1 | 2000-01-01 00:00:00 |
2 | 1 | 2000-01-01 00:00:00 |
3 | 2 | 2000-01-01 00:00:00 |
4 | 2 | 2000-01-01 00:00:00 |
5 | 3 | 2000-01-01 00:00:00 |
6 | 3 | 2000-01-01 00:00:00 |
7 | 3 | 2000-01-01 00:00:00 |
からユーザごとグループに分けて、過去の初ログインから1ヶ月間のログイン回数をカウントしたいです。
#コード
以下のコードを書きました。
Presto
1SELECT 2 user_id, COUNT(DISTINCT login_time) AS frequent_one_month 3FROM 4 login 5WHERE 6 TD_TIME_RANGE(login_time, 7 ( 8 SELECT DISTINCT FIRST_VALUE(login_time) 9 OVER(ORDER BY login_time) 10 FROM login 11 ), 12 TD_TIME_ADD( 13 ( 14 SELECT DISTINCT FIRST_VALUE(login_time) 15 OVER(ORDER BY login_time) 16 FROM login 17 ), 18 '30d') 19 ) 20GROUP BY 21 user_id 22ORDER BY 23 user_id
#困っていること
SQLではWHERE
->GROUP BY
の順で実行されるため、上のコードでは一番最初に誰かがログインした時間から1ヶ月間の時期の各ユーザのログイン回数になってしまいます。
ユーザごとにグループしてからその最初のログイン時間を算出したいです。GROUP BY
->WHERE
の順で実行したいです。
知見のある方ご教示いただきたいです。
#試したこと
HAVING
を用いて以下のコードを実行しましたが、以下のエラーが出てしまいました。
Presto
1SELECT 2 user_id, COUNT(DISTINCT login_time) AS frequent_one_month 3FROM 4 login 5GROUP BY 6 user_id 7HAVING 8 TD_TIME_RANGE(login_time, 9 ( 10 SELECT DISTINCT FIRST_VALUE(login_time) 11 OVER(ORDER BY login_time) 12 FROM login 13 ), 14 TD_TIME_ADD( 15 ( 16 SELECT DISTINCT FIRST_VALUE(login_time) 17 OVER(ORDER BY login_time) 18 FROM login 19 ), 20 '30d') 21 ) 22ORDER BY 23 user_id
error
1(HAVING内コード) must be an aggregate expression or appear in GROUP BY clause
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/10 23:29