return 乱序行

return out of order rows

这是 Postgres 中的关系 table。

我有一个 table 不断接收记录。结构是这样的:

组| object_date |钥匙 | event_tmstmp

我想做的事情:

例如:

'group1' | 20190324121233 | 'sometext/some/more/20190324121233.csv' | 2019-09-26 14:57:12.747638
'group1' | 20190324121234 | 'sometext/some/more/20190324121234.csv' | 2019-09-26 14:58:12.747638
'group1' | 20190324121236 | 'sometext/some/more/20190324121236.csv' | 2019-09-26 15:00:12.747638
'group1' | 20190324121235 | 'sometext/some/more/20190324121235.csv' | 2019-09-26 15:01:12.747638
'group1' | 20190324121237 | 'sometext/some/more/20190324121237.csv' | 2019-09-26 15:02:12.747638
'group1' | 20190324121238 | 'sometext/some/more/20190324121238.csv' | 2019-09-26 15:05:12.747638
'group1' | 20190324121241 | 'sometext/some/more/20190324121241.csv' | 2019-09-26 15:06:12.747638
'group1' | 20190324121240 | 'sometext/some/more/20190324121240.csv' | 2019-09-26 15:08:12.747638

所以我想要的是 return 行:

'group1' | 20190324121235 | 'sometext/some/more/20190324121235.csv' | 2019-09-26 15:01:12.747638
'group1' | 20190324121240 | 'sometext/some/more/20190324121240.csv' | 2019-09-26 15:08:12.747638

这是我目前的情况:

SELECT a.*
FROM table_1 AS a
WHERE a.object_date >
      ( SELECT b.object_date
        FROM table_1 AS b
        ORDER BY b.event_tmstmp DESC
        LIMIT 1
      );

但这只是 return 一行,而不是每个 group

我想我需要一个 partition by 子句来完成这个。我说得对吗?

您可以使用 lag():

select t.*
from (select t.*,
             lag(object_date) over (order by event_tmstmp) as prev_object_date
      from t
     ) t
where prev_object_date > object_date;