我有一个表(其中包括)时间戳列(名为timestamp;它是标准的Oracle DATE数据类型)。记录大约相隔4-11分钟,每小时大约7或8条记录,我正在尝试确定它们是否有任何模式。
是否有一种简单的方法可以查看每条记录,以及记录在上一条记录之后发生的分钟数?
谢谢, AndyDan
答案 0 :(得分:10)
这是Oracle 9i +,使用LAG function获取以前的时间戳值而无需自我加入:
SELECT t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp) AS diff
FROM YOUR_TABLE t
...但由于整数表示结果中的天数,因此小于24小时的差异将是一小部分。此外,如果没有先前的值,LAG将返回NULL - 与使用OUTER JOIN时相同。
要查看分钟,请使用ROUND功能:
SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes
FROM YOUR_TABLE t
答案 1 :(得分:1)
如果记录有序列ID,你可以像这样进行自我加入:
SELECT t2.*, t2.timestamp - t1.timestamp AS timediff
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1
你可能需要调整它来处理第一个和最后一个记录,但这是基础。