计算连续两天活跃的用户数量 mysql

Calculate amount of users who was active two days in a row mysql

提问人:Volodymyr 提问时间:3/26/2020 更新时间:3/26/2020 访问量:74

问:

我需要计算连续两天处于活动状态的用户数量。 我有表“activity”

user_id |login_time

1234 |2019-04-15

1456年 |2019-04-15

1234 |2019-04-16

1456年 |2019-04-17

我如何计算在 15 日和 16 日活跃的用户数量。

MySQL 日期 计数 自联接

评论

0赞 nbk 3/26/2020
您使用的是哪个 mysql 版本?
0赞 Tim Biegeleisen 3/26/2020
任何月份的 15 日和 16 日?任何一年?您是否尝试过查询?
0赞 Volodymyr 3/26/2020
例如,当月的 15 日和 16 日。MySQL 5.7.28 @nbk版本
0赞 Volodymyr 3/26/2020
@TimBiegeleisen 是的,我已经尝试过 - 第一次尝试 - 计算天数并通过 count(days(login_time)) = 2 来过滤它们,但这无效

答:

0赞 nbk 3/26/2020 #1

只有两天很容易,但如果你想计算一个月,你必须使用用户变量。

编辑: 当月

SELECT 
  COUNT(user_id)
FROM
  (SELECT
     user_id
   FROM 
     (SELECT `user_id`, `login_time` FROM user_login 
      WHERE `login_time` BETWEEN CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-15') 
        AND CONCAT(YEAR(NOW()),'-',MONTH(NOW()),'-16'
      GROUP BY `user_id`, `login_time`)
     user_login)
GROUP By user_id
HAVING COUNT( user_id) = 2) a
CREATE TABLE user_login (
  `user_id` INTEGER,
  `login_time` date
);

INSERT INTO user_login
  (`user_id`, `login_time`)
VALUES
  ('1234', '2019-04-15'),
  ('1456', '2019-04-15'),
  ('1456', '2019-04-15'),
  ('1234', '2019-04-16'),
  ('1456', '2019-04-17');
✓

✓
SELECT 
COUNT(user_id)
FROM
(SELECT
user_id
FROM 
(SELECT `user_id`, `login_time` FROM user_login
WHERE `login_time` BETWEEN '2019-04-15' AND '2019-04-16'  GROUP BY `user_id`, `login_time`)
user_login
GROUP By user_id
HAVING COUNT( user_id) = 2) a
| COUNT(user_id) |
| -------------: |
|              1 |

db<>fiddle 在这里

评论

0赞 Volodymyr 3/26/2020
也许你知道另一种制作方法?因为当我将此查询应用于我的表时,我的结果中只有一天处于活动状态的用户,以及连续两天处于活动状态的用户(我在选择中添加了 count(user_id) - 它显示 2 天,但是如果我在原始数据中检查当前用户 - 它只显示一天的活动 (
0赞 Volodymyr 3/26/2020
我理解问题 - 如果用户每天有 2 次登录 - 就像他每个时期有 2 次登录一样。如何计算每天的不同登录次数?
0赞 nbk 3/26/2020
当然,我更改了查询