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

The*_*des 0 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
Run Code Online (Sandbox Code Playgroud)

预期产出

month        uniqueUsers
---------    ----------
12015        2
22015        3
Run Code Online (Sandbox Code Playgroud)

这个查询

SELECT DISTINCT CONCAT( MONTH(  `Date` ) , YEAR(  `Date` ) ) AS 
MONTH ,  COUNT( DISTINCT  `ID` )  AS uniqueUsers
FROM  `myDB` 
Run Code Online (Sandbox Code Playgroud)

给我这些结果:

month        uniqueUsers
---------    ----------
12015        2
Run Code Online (Sandbox Code Playgroud)

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

我在这里缺少什么?

Gor*_*off 5

您缺少group by和聚合功能:

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

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

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

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

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