概述
业务中经常会遇到按年月日统计的场景;
但有时会有按周统计的情况;
我一般是用3种方法去解决:
- 利用
mysql
的weekday
函数。计算出当前日期是一周中的第几天,然后当前日期 - 这个数值
,就可以得到当前周的周一的日期;然后直接group by
即可 - 利用
week
函数,可以直接拿到当前日期是一年中的第几周;然后直接group by
即可;(注意week
函数需要设置mode
,不同的mode
返回的值不同) - 利用
YEARWEEK
函数,返回的是年+周
;然后group
即可。(同样也需要填充mode
,默认mode
是0
)
weekday函数简述
weekday
返回返回是0-6
对应周一至周日;那么当前日期-这个值就是当前日期对应这一周的周一的年月日;
#当前日期 - 返回值
create_time - weekday(create_time) as monday
week函数简述
一般我用的是5
,因为mode=5
,不用分大小周,返回都是从周一开始算;
mode=1
会有大小周,即跨年的那一周,最新那一年如果在跨年那周占据的天数少,那么返回0
,占据天数多则返回1)
参考博文
https://blog.csdn.net/dmw412724/article/details/95318091