year,month,dayofyear是mysql的函数,分别是取得年,月,和当前时间在本年是第几天的3个函数
date就是你保存时间的字段
等号后面的当然条件啦。
易客CRM之前的版本中有一个报表是按月统计销售情况,最近有个客户想按周统计销售情况。按月统计的Sql语句比较好写,sql语句如下:SELECT DATE_FORMAT(ec_salesorder.duedate,’%Y-%m’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,也就是把duedate日期以月的形式显示,然后groupby,那么按周如何统计呢?
搜了一下mysql的manual,在这里找到一个解决方法,通过mysql的week函数来做,sql语句如下:SELECT WEEK(ec_salesorder.duedate) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m,这个方法有个缺陷,不能显示年份,仅仅靠一个周数不方便查看统计信息。
继续研究mysql manual,在DATE_FORMAT函数介绍发现2个格式符和周有点关系:
%X Year for the week where Sunday is the first day of the week, numeric, four digitsused with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digitsused with %v
把上面的Sql语句中改成:
SELECT DATE_FORMAT(ec_salesorder.duedate,’%x %v’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m
显示的结果如下:
m total so_count
2009 11 10000.00 3
2009 12 44000.00 5
如果周日为一周的第一天,那么sql语句应该为:
SELECT DATE_FORMAT(ec_salesorder.duedate,’%X %V’) as m, sum(ec_salesorder.total) as total, count(*) as so_count FROM ec_salesorder GROUP BY m ORDER BY m
结果应该没错,不出意外,易客CRM下个版本将增加按周统计销售情况的报表。
具体看你的需求,如果是做成Web页面,那选择就多了。如果只是想查询一下数据,然后定时发送报表,那么推荐你用Sqlyog或者Toad for MySQL,尤其是Toad,报表功能非常强大,可以定制一个图文并茂的PDF,定时自动发送。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)