我试图找到一个 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 个月的数据
我在这里缺少什么?
您缺少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)
| 归档时间: |
|
| 查看次数: |
3560 次 |
| 最近记录: |