MySql:按日期计算不同值的出现次数

标签 mysql

我试图找到一个 MySQL 查询,该查询将在具有特定日期的特定字段 (ID) 中找到不同的值,然后计算该值出现的次数并按日期分隔。请参见下面的示例:

示例数据库

id         Date                    ID
-----      ------                  -------
1          2015-01-24 14:13:50     user1
2          2015-01-24 14:13:50     user1
3          2015-01-24 14:13:50     user2
4          2015-01-24 14:13:50     user2
5          2015-02-24 04:13:50     user2
6          2015-02-24 04:13:50     user1
7          2015-02-24 04:13:50     user3

预期输出

month        uniqueUsers
---------    ----------
12015        2
22015        3

这个查询

SELECT DISTINCT CONCAT( MONTH(  `Date` ) , YEAR(  `Date` ) ) AS 
MONTH ,  COUNT( DISTINCT  `ID` )  AS uniqueUsers
FROM  `myDB` 

给我这些结果:

month        uniqueUsers
---------    ----------
12015        2

但它不会提供第 2 个月的数据

我在这里错过了什么?

最佳答案

您缺少 group by 和聚合函数:

SELECT CONCAT(MONTH(`Date) , YEAR(`Date`)) AS MYYYY , 
       COUNT(DISTINCT ID) as NumUsers
FROM  `myDB` 
GROUP BY CONCAT(MONTH(`Date`), YEAR(`Date`) )

作为注释。我认为以 YYYYMM 格式放置年月组合更好。这样可以更好地对数据进行排序。你可以这样写:

SELECT DATE_FORMAT(`Date`, '%Y-%m') as YYYYMM, COUNT(DISTINCT ID) as NumUsers
FROM  `myDB` 
GROUP BY YYYYMM
ORDER BY YYYYMM;

事实上,您可以将其保留为两列:

SELECT YEAR(`Date`) as YYYY, MONTH(`Date`) as MM,
       COUNT(DISTINCT ID) as NumUsers
FROM  `myDB` 
GROUP BY YYYY, MM
ORDER BY YYYY, MM;

关于MySql:按日期计算不同值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268462/

相关文章:

jquery - 将大表单保存到多个表、规范化和动态查询

php - WordPress Form php代码提交空白值

mysql - 查询以计算表之间的多个总和

MySQL 可以根据提供的静态数据列表加入表吗?

php - MySQL计数并加入返回有序列表

php - mysql查询语法错误

mysql - 使用 1 :n in different column 重复 SQL 表中的每个值 n 次

c++ - raspbian (raspberry pi 3) 连接到数据库 (mysql/mariadb)

mySQL全文搜索问题

mysql - 在 TypeORM 中选择名称错误的索引