0

可能重复:
MySQL 查询 GROUP BY 日/月/年

我有以下mysql:

SELECT MONTH( FROM_UNIXTIME(  `timeStamp` ) ) as month , COUNT(  `id` )  as count
FROM  `discusComments` 
GROUP BY MONTH( FROM_UNIXTIME(  `timeStamp` ) ) 
ORDER BY  MONTH( FROM_UNIXTIME(  `timeStamp` ) ) ASC 
LIMIT 15

它获取过去 15 个月中每月的条目数量。我想知道为什么它只显示过去 12 个月……然后我意识到计数是所有年份的总和,而不是每个月的唯一年份。因此 12 月的值可能是 2012 年和 2011 年的总和。

我不想要这个。我想获取过去 15 个月以及 UNIQUE 月份年份的条目数量,例如 2012 年 12 月、2012 年 11 月等。

4

3 回答 3

1

将年份添加到您的SELECT列列表并添加别名GROUP BY

SELECT YEAR(FROM_UNIXTIME(`timestamp`))  AS year, 
       MONTH(FROM_UNIXTIME(`timestamp`)) AS month, 
       COUNT(`id`)                       AS count 
FROM   `discuscomments` 
GROUP  BY year, 
          month 
ORDER  BY year,
          month
LIMIT  15 
于 2012-12-16T20:54:06.707 回答
1

我对此最直接的想法通常是将日期值的格式更改为唯一且说话的字符串,例如 2012 年 12 月的 2012-12 和 2011 年 10 月的 2011-10 等。

您可以使用的功能是DATE_FORMAT()

 DATE_FORMAT(FROM_UNIXTIME(timeStamp), '%Y-%m')

然后这些字符串很容易排序,例如 ASC:

2011-10
2011-11
2011-12
...
2012-10
2012-11
2012-12

示例 SQL 查询:

SELECT
  DATE_FORMAT(FROM_UNIXTIME(timeStamp), '%Y-%m') as month, 
  COUNT(id) as count
FROM  discusComments
GROUP BY month
ORDER BY month ASC 
LIMIT 15
于 2012-12-16T20:55:25.823 回答
0

尝试这个

months_between(to_date ('2009/05/15', 'yyyy/mm/dd'), 
                     to_date ('2009/04/16', 'yyyy/mm/dd'))
于 2012-12-16T21:01:01.850 回答