背景
最近公司业务要求,需要生成一些订单的报表,按年、季度、月、周、日这样的维度来分别统计数据,特别来做一下记录。
代码
年、月、日这三个比较简单,应该大部分的人都知道怎么写
转成年
SELECT create_time,DATE_FORMAT(create_time,'%Y') as year
from user
结果
转成月
SELECT create_time,DATE_FORMAT(create_time,'%m') as month
from user
结果
转成日
SELECT create_time,DATE_FORMAT(create_time,'%d') as day
from user
结果
转成季度
MySQL提供了转成季度的函数quarter(指定的日期)
SELECT create_time,quarter(create_time)as quarter
from qn_user
结果
转成周
MySQL提供了转成周的函数 week(指定的日期)
注1: week()函数返回的周是从0开始的,所以要展示的话需要+1
注2: week()函数返回的是以年为维度的0-52周,如果需要展示到本月第几周的话,可以使用当前日期的周数 - 当前月份1号的周数 + 1 = 当前时间对应的本月周数
-- 年为维度的周数
SELECT create_time,week(create_time) + 1 as week
from qn_user
结果
-- 转成本月对应的周数
SELECT create_time,
week(create_time) - week(concat(date_format(create_time,'%Y-%m'),'-01')) + 1 as weekDay
from qn_user
结果
最后
这样已经可以做到业务要求的各种日期维度下的统计报表了,剩下的需要怎么展示就看业务要求了。