当前位置:实例文章 » JAVA Web实例» [文章]每天一道大厂SQL题【Day27】脉脉真题实战(三)连续两天活跃用户

每天一道大厂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` 子句中检查是否存在连续两天内登录过该平台的人员。

其他信息

其他资源

Top