sec*_*ave 4 postgresql window-functions
我有一个具有以下结构的数据库表:
id | created
-------+---------------
1 | 2018-07-23 00:01:00
2 | 2018-07-23 00:02:00
...
Run Code Online (Sandbox Code Playgroud)
现在我想返回与下一行的时间差大于 10 秒的所有行。
我尝试过使用 Postgres 窗口函数,但无法让它工作,例如
SELECT
created,
created - lag(created, 1) OVER (ORDER BY created) delta
FROM tablename
where created - lag(created, 1) OVER (ORDER BY created) > interval '10 seconds'
ORDER BY created;
Run Code Online (Sandbox Code Playgroud)
我得到的错误是我不允许在WHERE
子句中使用窗口函数。如何做到这一点?
考虑查询中的事件顺序SELECT
,如下所述:
窗口函数在应用子句后 对结果集进行操作。WHERE
在子句中使用窗口函数会产生逻辑矛盾WHERE
。就像 Mustaccio 所说:使用子查询 - 或 CTE - 来过滤窗口函数的结果。
但也要弄清楚逻辑:
其中与下一行的时间差大于例如10秒。
SELECT *
FROM (
SELECT created
, lead(created) OVER (ORDER BY created) - created AS delta
FROM tbl
) t
WHERE delta > interval '10 sec'
ORDER BY created;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3272 次 |
最近记录: |