Oracle:如何对比当前小时与昨日、上周同日同时段的交易记录数
小时级交易数量统计SQL解决方案
原SQL实现了全天交易数统计,要改为当前小时、昨日同一小时、上周同一天同一小时的小时级统计,只需调整时间区间的截断精度为小时(HH),修改后的SQL如下:
SELECT SUM(CASE WHEN request_time >= TRUNC(SYSDATE, 'HH') AND request_time <= SYSDATE THEN perf_count ELSE NULL END) AS "06AM_TODAY", SUM(CASE WHEN request_time >= TRUNC(SYSDATE, 'HH') - INTERVAL '1' DAY AND request_time < TRUNC(SYSDATE, 'HH') - INTERVAL '1' DAY + INTERVAL '1' HOUR THEN perf_count ELSE NULL END) AS "06AM_YESTERDAY", SUM(CASE WHEN request_time >= TRUNC(SYSDATE, 'HH') - INTERVAL '7' DAY AND request_time < TRUNC(SYSDATE, 'HH') - INTERVAL '7' DAY + INTERVAL '1' HOUR THEN perf_count ELSE NULL END) AS "06AM_LAST_WEEK_SAMEDAY" FROM perf_fact WHERE request_time >= TRUNC(SYSDATE, 'HH') - INTERVAL '7' DAY AND request_time <= SYSDATE;
关键调整说明
- 用
TRUNC(SYSDATE, 'HH')获取当前小时的起始时间,替代原有的全天截断逻辑TRUNC(SYSDATE) - 昨日同一小时:在当前小时起始时间基础上减1天,划定完整的1小时区间
- 上周同一天同一小时:在当前小时起始时间基础上减7天,划定完整的1小时区间
- 缩小WHERE条件的时间范围到上周同一小时至今,减少无效数据扫描,提升查询效率
期望输出
| 06AM_TODAY | 06AM_YESTERDAY | 06AM_LAST_WEEK_SAMEDAY |
|---|---|---|
| 1234 | 520 | 5685 |
内容的提问来源于stack exchange,提问作者Rizwan
相关产品推荐
相关产品推荐

