我想构建一个查询,它在最大时间戳之前45分钟返回所有记录。
例如,具有最新时间戳的记录是:
01.09.2013 11:00:00
现在我希望收到
的所有记录01.09.2013 10:15:00 to 11:00:00
答案 0 :(得分: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
答案 1 :(得分: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
会这样做。
答案 2 :(得分: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
或更高版本。