sql计算连续3天登录用户
时间: 2023-12-02 17:06:02 浏览: 39
假设有一个名为`user_login`的表,包含以下列:`user_id`(用户ID)和`login_date`(登录日期)。则可以使用以下SQL查询语句来计算连续3天登录用户:
```
SELECT DISTINCT t1.user_id
FROM user_login t1
JOIN user_login t2 ON t1.user_id = t2.user_id AND t2.login_date = DATE_ADD(t1.login_date, INTERVAL 1 DAY)
JOIN user_login t3 ON t2.user_id = t3.user_id AND t3.login_date = DATE_ADD(t2.login_date, INTERVAL 1 DAY)
```
该查询语句使用了三个表的自连接,并且在第二个和第三个表的连接条件中,使用了`DATE_ADD`函数来判断登录日期是否连续。最终,`DISTINCT`关键字用于去重,只保留连续3天登录的用户ID。
相关问题
hive计算连续登陆三天的用户的代码
以下是计算连续登陆三天的用户的Hive SQL代码:
```
SELECT DISTINCT user_id
FROM (
SELECT user_id,
date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS row_num
FROM login_table
) AS t1
JOIN (
SELECT user_id,
date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS row_num
FROM login_table
) AS t2 ON t1.user_id = t2.user_id AND t1.row_num = t2.row_num - 1 AND t1.date = DATE_SUB(t2.date, 1)
JOIN (
SELECT user_id,
date,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY date) AS row_num
FROM login_table
) AS t3 ON t1.user_id = t3.user_id AND t1.row_num = t3.row_num - 2 AND t1.date = DATE_SUB(t3.date, 2)
```
这个查询使用了三个子查询,分别对应用户的每次登录记录,并使用 ROW_NUMBER() 函数为每个用户的每次登录记录分配一个行号。然后,我们对这三个子查询进行了自连接,以找到连续的三次登录记录。最后,我们使用 DISTINCT 关键字来获取唯一的用户ID。
编写7天内连续活跃3次的用户
假设有一个名为user_activity的表,包含以下列:
- user_id: 用户的唯一标识符
- activity_date: 用户活跃的日期
下面是查询连续活跃3天的用户的SQL查询语句:
```
SELECT user_id
FROM (
SELECT
user_id,
activity_date,
activity_date - ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY activity_date) as grp
FROM user_activity
) t
GROUP BY user_id, grp
HAVING COUNT(*) >= 3;
```
这个查询首先计算了每个用户每天的行号,然后通过计算行号和活动日期之间的差异来计算用户的活动组。最后,通过将用户和活动组分组并计算每个组的行数,找到具有3个或更多行的组。