比较结果中的日期

Phi*_*ord 0 postgresql aggregate date

我想比较结果集中的日期

例子:

SELECT * FROM tbl WHERE foo=bar
Run Code Online (Sandbox Code Playgroud)

输出

id, datetime, name
1, 2014-01-01 18:13:45, test 1
2, 2014-01-01 19:01:32, test 2
3, 2014-01-01 20:34:44, test 3
4, 2014-01-03 04:45:22, test 4
Run Code Online (Sandbox Code Playgroud)

我希望能够区分每条记录之间的时间差异是小于还是大于前一条记录的 24 小时。

例子:

1, 2014-01-01 18:13:45, test 1 <-- first record since the previous record
2, 2014-01-01 19:01:32, test 2 <-- second record was less than 24 hours since the previous record
3, 2014-01-01 20:34:44, test 3 <-- third record was less than 24 hours since the previous record
4, 2014-01-03 04:45:22, test 4 <-- fourth record was more than 24 hours since the previous record
Run Code Online (Sandbox Code Playgroud)

想法?

Fab*_*oni 5

正如@ypercube 所说,lag()会有所帮助。

select id,
       (d - lag) as lag, 
       case when (d - lag) < interval '24 hours' then false else true end as p
from (
      select id, 
             (datetime) as d, 
             lag(datetime) over (order by id) as lag 
      from lagtest
     ) as t;
Run Code Online (Sandbox Code Playgroud)

对于第一行,不会显示延迟。