查询 - 在一系列时间戳中查找空间隔

时间:2013-12-13 05:09:29

标签: sql postgresql intervals

我有一张存储历史数据的表格。我每隔30秒从不同类型的源中插入一行,显然有一个时间戳关联。

让我的参数作为1小时的伤害。

由于我根据时间收取服务费用,因此我需要知道,例如,在特定月份,如果在这个月内有一段时间间隔等于或超过我的1小时间隔。

表格的简化结构如下:

tid serial primary key,
tunitd id int,
tts timestamp default now(),
tdescr text

我不想编写一个循环遍历所有记录的函数,逐个比较它们,因为我认为它耗费时间和内存。

有没有办法直接从SQL中使用PostgreSQL中的区间类型?

感谢。

1 个答案:

答案 0 :(得分:2)

这个小的SQL查询将显示持续时间超过一小时的所有间隙:

select tts, next_tts, next_tts-tts as diff from
(select a.tts, min(b.tts) as next_tts
from test1 a
inner join test1 b ON a.tts < b.tts
GROUP BY a.tts) as c
where next_tts - tts > INTERVAL '1 hour'
order by tts;

SQL Fiddle