Mysql按年份类别查询

语句为:select DATE_FORMAT(来电时间,'%Y-%m') as yue, 问题类别 , count(1) as num from mytable where 问题类别='农村合作医疗' group by DATE_FORMAT(来电时间,'%Y-%m') ,问题类别 ORDER BY 问题类别, yue;
结果为:

结果是正常的!
我修改DATE_FORMAT(来电时间,'%Y-%m')为DATE_FORMAT(来电时间,'2012-%m')后查询结果却变为:

我数据库中2012年的此问题类别只有2条啊?为什么出现这个情况,求解!!在线等~急!!
如果我只想查询某个类别中~2012年的所有月份的数据,语句该如何改?

第1个回答  2013-10-18
你要搞清楚 DATE_FORMAT 函数的用法,该函数是格式时间的一个函数,按照一个格式输入时间。
原型为DATE_FORMAT(日期,格式)
其中格式为:%Y 表示年份,%m月份, %d 天数,其他部分会原样输出

'%Y-%m',会按照 年-月输出: 2013-10,其中 -线原样输出
'2012-%m-%d',会按照 年-月-日输出: 2012-10-18,其中2012 和 - 部分原样输出。

你的语句可以改成

select DATE_FORMAT(来电时间,'%Y-%m') as yue, 问题类别 , count(1) as num from mytable where 问题类别='农村合作医疗' and 来电时间 >= '2012-1-1' and 来电时间 < '2013-1-1' group by DATE_FORMAT(来电时间,'%Y-%m') ,问题类别 ORDER BY 问题类别, yue;追问

可惜满意回答只能学习一个,要不真想都选啊~呵呵,非常感谢。学习了!!

第2个回答  2013-10-18
select DATE_FORMAT(来电时间,'%Y-%m') as yue, 问题类别 , count(1) as num from mytable where 问题类别='农村合作医疗' and DATE_FORMAT(来电时间,'%Y')='2012' group by DATE_FORMAT(来电时间,'%Y-%m') ,问题类别 ORDER BY 问题类别, yue;

加上年份判断不行吗?

数据2013-05 

被DATE_FORMAT(来电时间,'%2012-%m') 处理后

变2012-05

本回答被提问者采纳