我需要写一个查询,它将在最完成的四分之一小时内进行日期查找。
因此,如果当前时间是5:35,那么标准将是5:15 - 5:30。如果时间是5:46,那么5:30 - 5:45,如果时间是6:02,那么5:45 - 6:00。
不知道如何轻松地做到这一点。
类似
with cqh (dt) as (
select trunc(sysdate, 'hh') +
trunc(extract(minute from systimestamp) / 15) * interval '15' minute
from dual
)
select [_data_] from [_your_table_] cross join cqh
where [_date_column_] >= cqh.dt - interval '15' minute
and [_date_column_] < cqh.dt
;
子查询计算最近完成的25小时。它首先将SYSDATE
截断到当前小时的开始。然后我们加上15分钟的倍数——乘数是0、1、2或3,这取决于SYSDATE
的分钟分量。唉,EXTRACT(MINUTE FROM ...)
只适用于时间戳,所以我不得不在那里使用SYSTIMESTAMP
而不是SYSDATE
,但除此之外,计算应该是相当明显的。
然后交叉连接任何给你"数据"的东西;在这个小助手视图中,使用DT
值。