sql - SQL:根据条件选择不同的用户和分组
问题描述
我有一个数据库表:
User_id | User Name | Join_date | Activity_date |
1 abc 01/01/2021 02-01-2021
2 jay 01/01/2021 03-01-2021
2 jay 01/01/2021 04-01-2021
1 abc 01/01/2021 09-01-2021
1 abc 01/01/2021 16-01-2021
2 jay 01/01/2021 05-01-2021
3 xyz 03/03/2021 12-03-2021
3 xyz 03/03/2021 30-03-2021
2 jay 01/01/2021 26-01-2021
我想根据用户对用户进行分桶Activity_date
,例如每隔一天进行活动的用户进入表 1,每周进行活动的用户(间隔 6-7 天)进入表 2,所有其他用户进入表 3。
output
像这样的东西:
temporary_table1
: (隔天做一次活动的人继续一天)
User_id | User Name | Join_date | Activity_date |
2 jay 01/01/2021 03-01-2021
2 jay 01/01/2021 04-01-2021
2 jay 01/01/2021 05-01-2021
temporary_table_2
: (从第一次活动日期起每 6-7 天做一次活动的人)
User_id | User Name | Join_date | Activity_date |
1 abc 01/01/2021 02-01-2021
1 abc 01/01/2021 09-01-2021
1 abc 01/01/2021 15-01-2021
temporary_table_3
: (在这里添加 user_id =2 因为从这个用户完成的最后一个活动到最近完成的活动有超过 7 天的差距)
User_id | User Name | Join_date | Activity_date |
3 xyz 03/03/2021 12-03-2021
3 xyz 03/03/2021 30-03-2021
2 jay 01/01/2021 26-01-2021
如何在 SQL(Redshift)中实现这一点?
解决方案
你应该能够做这样的事情,然后你可以在 date_diff 上进行分组:
SELECT
user_id,
user_name,
join_date
activity_date,
#window function
LAG(activity_date) OVER (PARTITION BY user_id ORDER BY activity_date ASC) as day_before,
#difference in days between activity_date and day_before
DATEDIFF(
day,
LAG(activity_date) OVER (PARTITION BY user_id ORDER BY activity_date ASC),
activity_date
) as date_diff
FROM your_dataset
推荐阅读
- node.js - 在使用打字稿之前分配的变量
- python - 来自自定义模块 ModuleNotFoundError 的 python:没有名为“活动”的模块
- python - Flask 在重定向之前运行代码并在 python 控制台中抛出错误,但在烧瓶调试中没有
- python - Zepplin:带有用户定义的 python 版本的 Spark
- android - 尝试学习 Appium 时 Android Studio 中的重复类
- python - 转到链接的 Python 脚本
- nlp - 两个词与预训练的 NLTK 词网的相似度
- python - 如何修复,selenium.webdriver.Chrome(),tracebook
- html - 未找到编码 URL 的百分比
- linux - 文件写入后如何确认块设备是否不再被写入?