【发布时间】:2019-11-25 05:00:18
【问题描述】:
各位杰出的思想家,
我想创建一个 CASE 条件,为 active_users 给我一个“是”,即如果在 60 天内存在,则为相同的anonymous_id 提供更新的 uuid_ts。
SELECT t1.anonymous_id user_id,
t1.uuid_ts activity_date,
t2.uuid_ts signup_date,
-- Activity Lifetime: difference of number of days signed up to last activity
DATE_DIFF(CAST(t2.uuid_ts AS DATE), CAST(t1.uuid_ts AS DATE), DAY) AS activity_lifetime,
-- New Users: If month of activity is same as sign_up month
(CASE WHEN DATE_DIFF(CAST(t1.uuid_ts AS DATE), CAST(t2.uuid_ts AS DATE), MONTH)=0 THEN TRUE ELSE FALSE END) AS new_user,
-- Active Users: If month of activity is greater than sign_up month AND activity is found
(CASE WHEN DATE_DIFF(CAST(t1.uuid_ts AS DATE), CAST(t2.uuid_ts AS DATE), MONTH)>0
-- ** ____ NEED HELP HERE ____ **
AND anonymous_id NOT IN (SELECT anonymous_id FROM datascience.last_user_activity)
AND DATE_ADD(activity_date, INTERVAL 60 DAY) > (S)
FROM datascience.last_user_activity AS t1
INNER JOIN datascience.full_signup_completed AS t2
ON t2.anonymous_id = t1.anonymous_id
WHERE DATE(t1.uuid_ts) IS NOT NULL AND DATE(t2.uuid_ts) IS NOT NULL
ORDER BY activity_lifetime DESC
样本数据:
anon_id|signup_date|activity_date|
__________________________________
123 |01-01-2019 |02-01-2019 |
123 |01-01-2019 |02-02-2019 |
123 |01-01-2019 |02-03-2019 |
123 |01-01-2019 |02-04-2019 |
通缉:
anon_id|signup_date|activity_date| active
__________________________________
123 |01-01-2019 |02-01-2019 | yes
123 |01-01-2019 |02-02-2019 | yes
123 |01-01-2019 |02-03-2019 | no
123 |01-01-2019 |02-04-2019 | no
如果同一行中存在未来日期,在 60 天的范围内,则活动字段显示“是”,否则显示“否”。
【问题讨论】:
-
请提供样本数据和预期结果!
-
添加反馈数据:)
-
@AhmadM。 . . .我不知道示例数据如何说明您描述的规则。
-
激活的列显示用户的状态。根据该行的 activity_date,如果存在 60 天内的另一个更新日期,则将用户标记为活跃。
-
我也不明白,根据你的描述,这行
123 |01-01-2019 |02-03-2019 | no不应该标记为yes吗?另外,60 天是相对于该行的 activity_date 还是当前日期?,您的日期格式是“DD-MM-YYYY”吗?
标签: sql database google-bigquery