我有以下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月等。
答案 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'))