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下个版本将增加按周统计销售情况的报表。
你的日期格式应该是这样:2012-01-12
00:00:00
你可以把
2012-01-12
截取出来,这样就是按每天分组了
select
*
from
xxxx
group
by
SUBSTRING(column_name,1,10)
---这里的column_name是你的字段名称
以上是mysql数据库的,其他数据库的也类似
selecttable.year,
table.month,
table.day
from
(SELECT
year(time)
year,
month(time)
month,
day(time)
day
FROM
table)
table
group
by
table.year,table.month,table.day
order
BY
table.year,table.month,table.day
desc
望采纳,有疑问或是有更好写法,请多交流
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)