查询可以舍入到前30分钟的间隔

时间:2017-07-05 08:33:22

标签: sql oracle

我正在查询数据库以在30分钟间隔内获得结果

1)假设我在上午11点05分查询,我应该从上午10:30到上午11:00获取数据 2)如果我在11:35查询,我应该从上午11:00到11;凌晨30点得到数据。

简而言之,我正在寻找一个可以循环到前30分钟间隔的查询。

2 个答案:

答案 0 :(得分:1)

找出截断到小时开头的SYSDATESYSDATE之间的差异;如果它超过30分钟(1/48天),则范围的开始是SYSDATE被截断到最接近的小时,否则它被SYSDATE截断到最近的小时减去30分钟。该范围的结束仅在30分钟后。

SELECT *
FROM   your_table
WHERE  date_column >= TRUNC( SYSDATE, 'HH24' )
                      - CASE WHEN SYSDATE - TRUNC( SYSDATE, 'HH24' ) >= 1/48
                             THEN 0
                             ELSE 1/48 END
AND    date_column <  TRUNC( SYSDATE, 'HH24' )
                      + CASE WHEN SYSDATE - TRUNC( SYSDATE, 'HH24' ) >= 1/48
                             THEN 1/48
                             ELSE 0 END;

答案 1 :(得分:1)

with abcd as (select to_date('10:05','hh24:mi') test from dual 
               union all select to_date('10:30','hh24:mi') from dual 
               union all select to_date('10:31','hh24:mi') from dual               
               )
select trunc(test,'HH') trunc_date_to_hour , NUMTODSINTERVAL( round((test - trunc(test,'HH'))*24)/2, 'hour') minuts_to_add,trunc(test,'HH')+  NUMTODSINTERVAL( round((test - trunc(test,'HH'))*24)/2, 'hour')  from abcd;