SQL如何按前一日06:00至当日06:00区间统计生成通用Journey列
解决方案
核心通过时间偏移计算自动匹配统计周期,无需硬编码固定时间范围即可实现全日期通用计算。
调整后的SQL代码
SELECT `DATE`, -- 核心计算逻辑:统一减去6小时后取日期,即为对应统计周期的Journey值 DATE_SUB(`DATE`, INTERVAL 6 HOUR) AS Journey FROM `forcage`
逻辑说明
我们将原日期时间字段统一减去6小时后取日期,就能自动归到「前一天06:00至当日06:00」的对应周期:
- 原时间为
2021-05-19 03:20:00时,减6小时得到2021-05-18 21:20:00,对应Journey值为2021-05-18,匹配「2021-05-18 06:00 至 2021-05-19 06:00」周期 - 原时间为
2021-05-19 08:15:00时,减6小时得到2021-05-19 02:15:00,对应Journey值为2021-05-19,匹配「2021-05-19 06:00 至 2021-05-20 06:00」周期
不同SQL方言适配
如果使用的不是MySQL,替换对应时间计算函数即可:
- PostgreSQL:
"DATE" - INTERVAL '6 hours' AS Journey - SQL Server:
DATEADD(HOUR, -6, DATE) AS Journey - Oracle:
"DATE" - INTERVAL '6' HOUR AS Journey
内容的提问来源于stack exchange,提问作者Anas Lahmamsi
相关产品推荐
相关产品推荐

