我有一张存储历史数据的表格。我每隔30秒从不同类型的源中插入一行,显然有一个时间戳关联。
让我的参数作为1小时的伤害。
由于我根据时间收取服务费用,因此我需要知道,例如,在特定月份,如果在这个月内有一段时间间隔等于或超过我的1小时间隔。
表格的简化结构如下:
tid serial primary key,
tunitd id int,
tts timestamp default now(),
tdescr text
我不想编写一个循环遍历所有记录的函数,逐个比较它们,因为我认为它耗费时间和内存。
有没有办法直接从SQL中使用PostgreSQL中的区间类型?
感谢。
答案 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;