构造查询以查找最近两个小时内具有唯一ID

问题描述

我正在尝试在最近两个小时内为每个唯一的Data->> Id选择所有最新行(基于“时间”列)。 “数据”列是一个json列,应由箭头运算符访问。

Id        Time                    Data
1      2020-08-13 18:13:14       {'Id': "1"}
2      2020-08-13 18:14:12       {'Id': "2"}
3      2020-08-13 18:14:19       {'Id': "1"}
4      2020-08-13 17:13:21       {'Id': "2"}
5      2020-08-13 18:23:54       {'Id': "1"}
6      2020-08-13 13:13:21       {'Id': "2"}

结果应该是这样,当前时间是2020-08-13 18:15:00

Id        Time                    Data
1      2020-08-13 18:13:14       {'Id': "1"}
4      2020-08-13 17:13:21       {'Id': "2"}

解决方法

您可以使用distinct on

select distinct on (data) t.*
from t
order by data,time desc;
,

使用distinct on和json访问器:

select distinct on (data ->> 'id') t.*
from mytable t
order by data ->> 'id',time desc