Postgres时间戳之间的差异以分钟为单位

时间:2017-04-24 09:08:11

标签: postgresql

我试图在具有相同nodeid的下面数据的事件时间和具有count>的nodeid的代码之间获得分钟的时间差。 1

nodeid  code     event_time
CAI0015 14961045 2017-04-22 21:22:00
CAI0024 14961045 2017-04-23 19:44:00
CAI0024 14961045 2017-04-23 09:07:00
CAI0040 14971047 2017-04-23 13:58:00
CAI0046 14961045 2017-04-23 11:19:00
CAI0050 14961045 2017-04-24 02:06:00

输出应该是这样的:

nodeid  code     difference(min)
CAI0024 14961045 637

2 个答案:

答案 0 :(得分:1)

使用formula extract(epoch from <later> - <earlier>) / 60以分钟为单位获取时间戳差异。

要在表格中选择差异的所有排列(nodeidcode相同),请使用自加入:

select nodeid, code, extract(epoch from e2.event_time - e1.event_time) / 60 difference
from   events e1
join   events e2 using (nodeid, code)
where  e1.event_time < e2.event_time

但是,如果给定nodeid&amp;的行数超过2行,这似乎并没有实际用处。 {{一对。要仅计算之前的差异,请使用lag() window function

code

http://rextester.com/HGY2600

注意:这两个只会为每个select nodeid, code, extract(epoch from event_time - lag) / 60 difference from (select *, lag(event_time) over (partition by nodeid, code order by event_time) from events) e where lag is not null &amp; nodeid对,如果您的所有对只有最多2行。

答案 1 :(得分:0)

尝试使用dense_rank查找下一个事件。

_JAVA_OPTIONS = -Djava.net.preferIPv4Stack=true