【发布时间】:2021-08-31 07:17:02
【问题描述】:
我尝试编写一个 (postgres) sql 查询,该查询返回特定数字列低于其前一个值之前的最后一行,用于多个 services。
假设给定的数据如下所示:
service | captured | online_seconds
--------+----------+---------------
A | 01:10:00 | 500 <--
A | 01:08:00 | 100
A | 01:07:00 | 600 <--
A | 01:02:00 | 50
B | 01:09:00 | 400 <--
B | 01:06:00 | 200
B | 01:05:00 | 700 <--
预期的结果是:
service | captured | online_seconds
--------+----------+---------------
A | 01:10:00 | 500
A | 01:07:00 | 600
B | 01:09:00 | 400
B | 01:05:00 | 700
SQL 小提琴:https://www.db-fiddle.com/f/9jZiSLa5L9tCD7pmXwFiYW/1
到目前为止,我无法找到任何解决方案,如果可能的话,有什么想法可以实施吗?
【问题讨论】:
-
您不希望每个服务都有这个? IE。您希望在结果中包含最后一行,而不是服务 A 的最后一行,因为这之后是一行在线秒数增加的行,无论它是另一项服务。对吗?
-
结果应该是每个服务,正如您在预期结果中看到的那样。 A 和 B 完全独立。
-
啊,对不起,我的时间倒退了。表中的最后一行是捕获的第一行。所以我把这一切都搞混了。我已经更正了我的答案(即添加了缺少的分区子句)。
标签: sql postgresql greatest-n-per-group