下面是表格:
Col1 Col2 Col3
---------------------------------------
4567 102 5/5/2011 3:37:41 PM
9876 102 5/5/2011 3:37:43 PM
1234 104 5/5/2011 12:46:16 PM
9999 104 5/5/2011 12:47:09 PM
9999 104 5/5/2011 12:47:15 PM如何使用SYSDATE通过秒'SS‘和/或分钟'MI’在报告上快速显示来仅获取一条或多条记录?我知道在fxn之间,但处理秒数对我来说是一种滑坡路。有什么想法吗?
发布于 2011-05-06 05:04:11
我不太清楚您的意思,但是如果您想将返回的记录限制在几分钟或几秒钟之前,并且假设COL3已被索引,您可以这样做:
SELECT COL1, COL2, COL3
FROM MY_TABLE
WHERE COL3 > SYSDATE - INTERVAL '3' MINUTE
ORDER BY COL3 DESC;如果你愿意,INTERVAL可以在几秒内完成;或者两者兼而有之,例如INTERVAL '01:30' MINUTE TO SECOND会倒退90秒,INTERVAL '90' SECOND也一样。(也不确定这是否需要由用户作为参数提供)。
仍然不清楚您想要实现什么,以及您想要使用什么标准来限制返回的行。但是,如果您确实想要最近的记录以及它的特定时间段内的任何记录,您可以这样做:
SELECT COL1, COL2, COL3 FROM (
SELECT COL1, COL2, COL3,
NUMTODSINTERVAL(
FIRST_VALUE(COL3) OVER (ORDER BY COL3 DESC) - COL3,'DAY') AS DIFF
FROM MY_TABLE
)
WHERE DIFF < INTERVAL '01:30' MINUTE TO SECOND
ORDER BY COL3 DESC;这将返回最近的记录,再加上90秒内带有COL3的记录。所以总会有至少一条记录返回。但是它没有过滤COL3,它必须评估每一行以计算出偏移量,所以它可能会执行全表或索引扫描。例如,如果您只想要今天的记录,则无论如何都可以过滤内部选择。如果不是,它可能无法满足您的“快速”需求。
一种可能更快,但可能更丑陋的解决方案可能是:
SELECT COL1, COL2, COL3
FROM MY_TABLE
WHERE COL3 > (SELECT MAX(COL3) FROM MY_TABLE) - INTERVAL '01:30' MINUTE TO SECOND
ORDER BY COL3 DESC;我真的不确定这是你想要的,或者SYSDATE是如何适应的。
发布于 2011-05-06 15:14:04
您可以使用SYSDATE进行计算。负1等于昨天。负1/24是一小时前的事了。负1/(24*60)是一分钟前。负1/(24*60*60)是一秒前。
此查询应显示最近10秒内日期的所有记录:
select *
from my_table
where col3 > sysdate - 10/(24*60*60);这就是你要找的吗?
https://stackoverflow.com/questions/5903714
复制相似问题