Mysql:仅当日期不同时才计算每月不同的user_ids

标签 mysql sql database mysql-5.7 mysql-5.6

-------------------------
  id | user_id | date
------------------------
  1     1         2017-09-12
  2     1         2017-09-12
  3     1         2017-09-13
  4     2         2017-09-14
  5     2         2017-09-15
---------------------------

我想返回包含用户数量的每月记录。

SELECT DATE_FORMAT(date, '%Y-%m') AS date_period, COUNT(DISTINCT user_id) AS c 
  FROM stats GROUP by date_period

上面的查询返回 2017-09 的计数为 2,但我想避免每天出现重复的 user_id/date。

  id | user_id | date
  1     1         2017-09-12
  2     1         2017-09-12

以上行应计为 1,因为它是同一用户和同一日期

  id | user_id | date
 3     1         2017-09-13

上面的记录是user_id => 1,但是不同的日期,所以应该被计算在内。

  id | user_id | date
  4     2         2017-09-14
  5     2         2017-09-15

User_id => 2 在不同日期有两行,因此应计为 2

1 +1 + 2 = 4

计数结果应为4。

我被查询返回每月的 user_id (避免同一天的重复记录)

最佳答案

这对我有用:

SELECT 
DATE_FORMAT(date, '%Y-%m') AS 'sum_month',
user_id,
COUNT(DISTINCT user_id,date) AS 'Count'
FROM test
GROUP BY sum_month,user_id;

希望对您有帮助。

关于Mysql:仅当日期不同时才计算每月不同的user_ids,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48690597/

相关文章:

php - 插入相关表mysql

mysql - 如何在不使用distinct的情况下避免一对多关联中的重复记录?

mysql - 尝试了解产品标签行为

database - 是否可以更改 View 中列的数据类型?

php - 查询3个mysql表以创建HTML表

PHP mysqli子查询在读取const表后注意到不可能返回Impossible WHERE

mysql 在大表上慢选择 order by

mysql - INNER JOIN DISTINCT 与 MySQL

sql - 如何选择 COUNT DISTINCT 为 MAX 的行?

database - 主键应该是 auto_increment 吗?