Sql 返回顺序错误的行

Sql 返回顺序错误的行,sql,postgresql,dense-rank,Sql,Postgresql,Dense Rank,这是Postgres中的一个关系表 我有一个不断接收记录的表。结构如下: 组|对象|日期|键|事件| tmstmp 其中group是一组记录的唯一标识符 键是包含日期时间的字符串(即:“sometext/some/more/201903241223.csv) 其中,对象日期键的子字符串的int(上面的值,so 201903241223) 其中event_tmstp是插入行时默认为now()的日期时间 我想做的是: 按事件对行进行排序\u tmp 对于每组行,根据对象日期返回“无序”的所有行

这是Postgres中的一个关系表

我有一个不断接收记录的表。结构如下:

组|对象|日期|键|事件| tmstmp

  • 其中group是一组记录的唯一标识符
  • 键是包含日期时间的字符串(即:“sometext/some/more/201903241223.csv)
  • 其中,对象日期键的子字符串的int(上面的值,so 201903241223)
  • 其中event_tmstp是插入行时默认为now()的日期时间
我想做的是:

  • 按事件对行进行排序\u tmp
  • 对于每组行,根据对象日期返回“无序”的所有行
例:

因此,我希望返回的是行:

'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
      );
但这只返回一行,而不是针对每个

我想我需要一个partitionby子句来完成这个任务。我说的对吗?

您可以使用
lag()


谢谢,这在理论上似乎是可行的,但是你不能在event_-tmp(没有时区的时间戳)和object_-date(bigint)@William之间做操作符。非常感谢。名字都被删掉了。
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
      );
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;