我有一个表,其中有一个时间戳列(名为timestamp;它是一种标准的Oracle DATE数据类型)。这些记录大约相隔4-11分钟,每小时大约有7或8个记录,我正在尝试确定它们是否有任何模式。
有没有一种简单的方法来查看每条记录,以及该记录在前一条记录之后的分钟数?
谢谢,AndyDan
发布于 2010-11-30 06:22:13
这是Oracle 9i+,它使用LAG function来获取之前的时间戳值,而不需要自连接:
SELECT t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp) AS diff
FROM YOUR_TABLE t
...but因为整数表示结果中的天数,所以小于24小时的差值将是一个分数。此外,如果没有更早的值,则LAG将返回NULL --就像使用了外部联接一样。
要查看分钟数,请使用ROUND函数:
SELECT ROUND((t.timestamp - LAG(t.timestamp) OVER (ORDER BY t.timestamp)) *1440) AS diff_in_minutes
FROM YOUR_TABLE t
发布于 2010-11-30 06:20:59
如果记录有连续的id,你可以像这样做一个自连接:
SELECT t2.*, t2.timestamp - t1.timestamp AS timediff
FROM foo t1 inner join foo.t2 on t1.id = t2.id-1
您可能需要对此进行调整以处理第一条和最后一条记录,但这是最基本的。
https://stackoverflow.com/questions/4308620
复制相似问题