5

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

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

谢谢,安迪丹

4

2 回答 2

12

这是Oracle 9i+,使用LAG函数获取之前的时间戳值,无需自连接:

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
于 2010-11-29T22:22:13.133 回答
1

如果记录具有顺序 ID,您可以像这样进行自联接:

SELECT t2.*, t2.timestamp - t1.timestamp AS timediff
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1

您可能需要对其进行调整以处理第一条和最后一条记录,但这是基础。

于 2010-11-29T22:20:58.690 回答