业务需要把每天的日期进行分组,分组原则是上周四 - 本周三,
例如20230629-20230705这个日期范围算一个分组,
20230707周五需要归到20230706-20230712这个分组,以此类推...
mysql的实现方案如下:
CONCAT(DATE_FORMAT(DATE_SUB(date_format(source_time, '%Y%m%d'),
INTERVAL (WEEKDAY(date_format(source_time, '%Y%m%d')) + 4) % 7 DAY), '%Y%m%d'),
'-',
DATE_FORMAT(DATE_ADD(date_format(source_time, '%Y%m%d'),
INTERVAL (6 - (WEEKDAY(date_format(source_time, '%Y%m%d')) - 3)) % 7 DAY), '%Y%m%d')
例如对20230703输出结果是
20230629-20230705
其中sourcetime是2023-07-01 07:02:14这种格式,
date_sub(日期, interval (x day))是mysql里日期加减的语法,
weekday对周一到周日的取值分别是0-6
对每个日期先找到其归属的周四,例如20230703周一,weekday的取值是0,需要往前减4天才是上周四,(0+4)%7 = 4
再找到其归属的周三,例如20230703周一,weekday的取值是0,需要往后加2天才是周三,(6-(0-3))%7 = 2