Postgresql在布尔列更改之间的时间

时间:2015-07-14 11:23:18

标签: postgresql

我有一个有四列的桌子; ID,timestamp,event_name和changed_to(boolean)。

我需要知道如何才能获得“时间戳”之间的时代。在哪里' changed_to'根据' event_name'从true变为false以e_DrvMotorStartUp为例。

id    timestamp                   event_name          changed_to
56682 2015-04-14 09:06:21.93022   e_DrvMotorStartUp  t
56683 2015-04-14 09:06:24.928389  e_DrvMotorRun      t
56684 2015-04-14 09:06:24.928389  e_DrvMotorStartUp  f

感谢。

1 个答案:

答案 0 :(得分:0)

您需要的是LATERAL JOIN

SELECT e.*, e2.*, e."timestamp" - e2."timestamp"
FROM tbl AS e
,LATERAL (SELECT *
          FROM tbl
          WHERE tbl.event_name = e.event_name
                AND e."timestamp" > tbl."timestamp"
                AND tbl.changed_to = 't'
          ORDER BY tbl."timestamp" DESC
          LIMIT 1)
WHERE e.changed_to = 'f'