按每年唯一的月份分组,而不仅仅是月份[重复]
Posted
技术标签:
【中文标题】按每年唯一的月份分组,而不仅仅是月份[重复]【英文标题】:group by unique month per year, not just month [duplicate] 【发布时间】:2012-12-04 00:41:48 【问题描述】:可能重复: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 月等。
【问题讨论】:
月回报1-12(含) 我不知道如何使它按“月年”分组,而不仅仅是“月”或“年” 【参考方案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
【讨论】:
【参考方案2】:对此我最直接的想法通常是将日期值的格式更改为一个唯一且能说话的字符串,例如 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
【讨论】:
但这会增加复杂性,因为稍后您必须拆分month
列。
是的,它只是某种“自己动手”/“帮助自己”的解决方案,甚至适用于低级系统。您的答案更好地采用 SQL 本身。也只是看到MySQL Query GROUP BY day / month / year【参考方案3】:
试试这个
months_between(to_date ('2009/05/15', 'yyyy/mm/dd'),
to_date ('2009/04/16', 'yyyy/mm/dd'))
【讨论】:
嘿,您可能应该详细说明为什么您的解决方案会起作用以上是关于按每年唯一的月份分组,而不仅仅是月份[重复]的主要内容,如果未能解决你的问题,请参考以下文章