Avatar of the person chatting

我有一张数据表,叫做 user_events,有两个字段分别叫做 user_id 以及 event_date 请帮我写一句SQL,统计每天的新用户数。新用户的定义是,首次在表内出现,或者连续90天没有在表内出现之后。再一次出现。

以下是一句可以用于统计每天新用户数量的SQL语句:

vbnetCopy code
SELECT event_date, COUNT(DISTINCT user_id) AS new_users FROM (SELECT user_id, event_date, LAG(event_date, 1) OVER (PARTITION BY user_id ORDER BY event_date) AS prev_event_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_date) AS row_num FROM user_events) AS t WHERE event_date = prev_event_date OR prev_event_date IS NULL OR DATEDIFF(event_date, prev_event_date) > 90 GROUP BY event_date ORDER BY event_date

这个语句首先使用了一个子查询,该子查询使用了窗口函数LAG,该函数用于计算每个用户的前一次事件日期。它还使用了ROW_NUMBER函数来为每个用户的事件编号。最终的查询从该子查询中选择了用户ID,事件日期,前一次事件日期和事件编号。然后它根据事件日期和前一次事件日期之间的时间差是否大于90天来确定哪些用户是新用户。最后,它按日期分组并计算每天新用户的数量。