2

我想构建一个查询,它返回最大时间戳前 45 分钟的所有记录。

例如时间戳最新的记录是:

01.09.2013 11:00:00

现在我想从

01.09.2013 10:15:00 to 11:00:00
4

3 回答 3

4

您可以通过使用Max聚合/分析函数和interval语句来完成此操作:这是一个示例:

   select col  
    from ( select col
                , max(col) over() as max_time
            from t1) t
   where t.col between t.max_time - interval '45' minute 
                   and t.max_time

结果:

Col 
--------------------
01.09.13 11:00:00 AM 
01.09.13 10:45:00 AM 
01.09.13 10:30:00 AM 
01.09.13 10:15:00 AM 

SQLFiddle 演示

于 2013-09-11T19:58:16.907 回答
3
with cte as
  (select max(the_timestamp_field) the_timestamp_field
     from test)    
select
    *
from
    test,cte
where
    test.the_timestamp_field between cte.the_timestamp_field - (1/24*.75)
                                 and  cte.the_timestamp_field

会做的。

于 2013-09-11T19:50:49.467 回答
0

可以简单也可以复杂一点,这取决于您要如何确定记录的创建时间。如果您的表中有一个日期列指示创建时间,这很简单:

SELECT columns
FROM table
WHERE date_column BETWEEN TO_DATE ('01.09.2013 10:15', 'MM.DD.YYYY HH24:MI') AND
TO_DATE('01.09.2013 11:00', 'MM.DD.YYYY HH24:MI')

如果没有日期列,您可以使用SCN_TO_TIMESTAMP( ORA_ROWSCN) 伪列来确定创建时间,但请注意此功能需要10g或更高版本。

于 2013-09-11T19:51:11.037 回答