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