我试图找到一个 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/