【问题标题】:SQL: Selecting Distinct users and groupby based on conditionSQL:根据条件选择不同的用户和分组
【发布时间】:2021-06-30 10:52:04
【问题描述】:

我有一个数据库表:

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 对用户进行分桶,例如每隔一天进行活动的用户进入 table1,每周进行活动的用户(间隔 6-7 天)进入 table2,所有其他用户进入表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:(从第一个Activity_date开始每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) 中实现这一点?

【问题讨论】:

  • 我删除了标签 [mysql] 和 [sql-server] 因为它们有冲突,并添加了 Amazon Redshift,正如您所说的那样,这是您真正使用的在结束语中。请确保在发布问题时正确标记。谢谢。
  • 非常感谢您的建议和更新,我以后真的会更正它。

标签: sql group-by amazon-redshift


【解决方案1】:

你应该能够做这样的事情,然后你可以在 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

【讨论】:

    猜你喜欢
    • 2022-12-20
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多