生产有提数的需求,需要统计上一月,前两周的数据
根据下面的函数,我很快给出了统计sql,但在闲暇至于回想起来,似乎有点问题,就有了本篇文章来记录此事。
VALUES WEEK(CURRENT date);//9
VALUES YEAR(CURRENT date);//2022
VALUES MONTH(CURRENT date);//2
查询条件如下:
--获取上一个月的数据
month(TMV.biz_date) = month(current date) -1
and year(TMV.biz_date) = year(current date)
--前两周
week(biz_date) in (week(current date) -1 ,week(current date) -2 )
回顾:
如果恰好是一月份呢,比较年份似乎有些不对,于是把年份*12+月份 跟当前时间的年份*12+月份-1相等,即得出上月时间范围。
SELECT * FROM table t WHERE
year(TMV.biz_date)*12 + month(TMV.biz_date) = year(current date) + month(current date) -1
上两周的话,不同年份有相同的周看,要解决这个问题,得引出另一个函数:
DAYOFWEEK函数 /DAYOFWEEK_ISO函数
DAYOFWEEK函数返回一个日期、时间戳、日期字符串、时间戳字符串在周内的天值(从周日开始 1 到 7 )。
DAYOFWEEK_ISO函数返回一个日期、时间戳、日期字符串、时间戳字符串在周内的天值(从周一开始 1 到 7 )。
DAYOFWEEK从周日开始算,DAYOFWEEK_ISO从周一开始算。用哪个都行
--当前是2022-02-24
--上周日 2022-02-20
values current date - dayofweek_iso(current date)
values dayofweek_iso(current date)
--上两周的周一 2022-02-07
values current date - dayofweek_iso(current date) - 13
SELECT * FROM table t WHERE
--前两周
t.biz_date >= current date - dayofweek_iso(current date) - 13
and t.biz_date <= current date - dayofweek_iso(current date)