记录之间的时间差异

时间:2010-11-29 22:13:52

标签: sql oracle date-arithmetic

我有一个表(其中包括)时间戳列(名为timestamp;它是标准的Oracle DATE数据类型)。记录大约相隔4-11分钟,每小时大约7或8条记录,我正在尝试确定它们是否有任何模式。

是否有一种简单的方法可以查看每条记录,以及记录在上一条记录之后发生的分钟数?

谢谢, AndyDan

2 个答案:

答案 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

你可能需要调整它来处理第一个和最后一个记录,但这是基础。