每天一道大厂SQL题【Day27】脉脉真题实战(三)连续两天活跃用户
发布人:shili8
发布时间:2025-02-06 04:47
阅读次数:0
**每天一道大厂SQL题 Day27**
**脉脉真题实战 (三)****连续两天活跃用户**
## 背景介绍在社交媒体平台中,活跃用户是指在过去的24小时内登录过该平台的人员。我们需要找出所有在连续两天内登录过该平台的人员。
##问题描述假设我们有一个名为 `user_login` 的表格,其结构如下:
| id | user_id | login_date |
| --- | --- | --- |
|1 |1 |2022-01-01 |
|2 |1 |2022-01-02 |
|3 |2 |2022-01-03 |
|4 |2 |2022-01-04 |
|5 |3 |2022-01-05 |
我们需要找出所有在连续两天内登录过该平台的人员。
## SQL 解决方案
sqlSELECT DISTINCT user_idFROM ( SELECT user_id, DATE(login_date) AS login_day, LAG(DATE(login_date),1, NULL) OVER (PARTITION BY user_id ORDER BY login_date) AS prev_login_day FROM user_login) tWHERE login_day = prev_login_day + INTERVAL '1 day'
## 解释我们首先使用 `LAG` 函数来获取每个用户的上一次登录日期。然后,我们在 `WHERE` 子句中检查是否存在连续两天内登录过该平台的人员。
##代码注释* `PARTITION BY user_id ORDER BY login_date`: 将数据按用户ID和登录日期排序。
* `LAG(DATE(login_date),1, NULL) OVER (...)`: 获取每个用户的上一次登录日期,若无,则为NULL。
* `WHERE login_day = prev_login_day + INTERVAL '1 day'`: 检查是否存在连续两天内登录过该平台的人员。
## 示例数据| id | user_id | login_date |
| --- | --- | --- |
|1 |1 |2022-01-01 |
|2 |1 |2022-01-02 |
|3 |2 |2022-01-03 |
|4 |2 |2022-01-04 |
|5 |3 |2022-01-05 |
## 结果| user_id |
| --- |
|1 |
|2 |
## 总结本题目要求找出所有在连续两天内登录过该平台的人员。我们使用 `LAG` 函数来获取每个用户的上一次登录日期,然后在 `WHERE` 子句中检查是否存在连续两天内登录过该平台的人员。