SQL查询 id 和 登录时间 查询连续7天登录的用户
时间: 2024-03-04 09:49:08 浏览: 13
假设用户登录信息存储在名为`user_login_info`的表中,其中包含`id`、`login_time`和其他列,您可以使用以下SQL查询来查询连续7天登录的用户:
```sql
SELECT id, MIN(login_time) AS start_time, MAX(login_time) AS end_time
FROM (
SELECT id, login_time,
DATEADD(day, DATEDIFF(day, 0, login_time), 0) AS day_start -- 将登录时间转换为当天的0点
FROM user_login_info
) AS t1
GROUP BY id, DATEADD(day, -ROW_NUMBER() OVER (PARTITION BY id, day_start ORDER BY login_time), day_start)
HAVING COUNT(*) >= 7
```
该查询使用了窗口函数和子查询来实现。首先,我们将`login_time`转换为当天的0点,以便在后续计算中将同一天的登录记录分组。然后,使用窗口函数`ROW_NUMBER()`对每个用户的每个日期的登录记录进行编号,以便在后续计算中比较每个日期的顺序。最后,使用`GROUP BY`和`HAVING`子句来筛选出连续7天及以上的登录记录,并返回相应的用户ID、起始时间和结束时间。
相关问题
数据库 用户id 和 登录时间 怎么计算连续登录7天
假设数据库中有一个名为"user_login_info"的表,包含用户id和登录时间两个字段,可以使用以下SQL语句计算连续登录7天的用户:
```
SELECT user_id
FROM user_login_info
WHERE login_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY user_id
HAVING COUNT(DISTINCT DATE(login_time)) = 7
```
上述SQL语句中,使用了DATE_SUB函数来获取当前时间往前7天的日期,然后筛选出在这个时间范围内登录过的用户,最后按照用户id进行分组,统计每个用户登录的天数,如果等于7则表示该用户连续登录了7天。
使用with用法编写7天内连续活跃3次的用户sql
假设我们有一个用户表user_info,包含用户ID(user_id)和活跃日期(active_date)两个字段,下面是使用with语法编写的7天内连续活跃3次的用户SQL:
```
WITH active_users AS (
SELECT
user_id,
active_date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY active_date) AS row_num
FROM user_info
WHERE active_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 DAY)
)
SELECT DISTINCT au1.user_id
FROM active_users au1
JOIN active_users au2 ON au2.user_id = au1.user_id AND au2.row_num = au1.row_num + 1
JOIN active_users au3 ON au3.user_id = au2.user_id AND au3.row_num = au2.row_num + 1;
```
这个SQL语句首先使用with语法创建了一个名为active_users的临时表,该表按照用户ID和活跃日期排序,并为每个用户分配一个行号(row_num)。然后,我们使用三个自我联接获取在7天内连续活跃3次的用户ID。具体地,我们使用au1、au2和au3三个别名来代表active_users表中的三个不同的行,然后使用JOIN子句将它们连接起来。最后,我们使用DISTINCT关键字去重得到符合条件的用户ID。