每年独特的月份,而不仅仅是月份

时间:2012-12-16 20:50:23

标签: php mysql sql

  

可能重复:
  MySQL Query GROUP BY day / month / year

我有以下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月等。

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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

答案 2 :(得分:0)

试试这个

months_between(to_date ('2009/05/15', 'yyyy/mm/dd'), 
                     to_date ('2009/04/16', 'yyyy/mm/dd'))