Sql 在多个传感器的定时观测表中,如何以最佳方式检索每个传感器的最后一次观测

Sql 在多个传感器的定时观测表中,如何以最佳方式检索每个传感器的最后一次观测,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我的表格如下: 传感器 时间 价值 AAA 2021-01-05 04:10:14 3.14159 AAA 2021-01-05 05:08:07 3.94756 基础知识 2021-01-05 03:40:54 4.32543 您可以使用窗口功能,如行数() 假设时间值出现关联,则可以使用densite\u RANK()函数,以便在结果集中包含所有相等的时间值 您可以尝试使用递归CTE: with recursive t as ( (select sensor, time, value

我的表格如下:

传感器 时间 价值 AAA 2021-01-05 04:10:14 3.14159 AAA 2021-01-05 05:08:07 3.94756 基础知识 2021-01-05 03:40:54 4.32543
您可以使用窗口功能,如
行数()

假设时间值出现关联,则可以使用
densite\u RANK()
函数,以便在结果集中包含所有相等的时间值


您可以尝试使用递归CTE:

with recursive t as (
    (select sensor, time, value
     from observations
     order by sensor, time desc limit 1)
    union all
    (select o.sensor, o.time, o.value
     from observations as o join t on (o.sensor > t.sensor)
     order by o.sensor, o.time desc limit 1))
select * from t;
观测值(传感器、时间描述)进行索引
会有很大帮助。

对于此查询:

SELECT DISTINCT ON (sensor) sensor, time, value
FROM observations
ORDER BY sensor, time DESC
您需要
(传感器,时间描述)
上的索引

有了这样一个索引,这可能是做你想做的事情的最快的方法。

distinct on()
通常是最有效的方法。
distinct on()
通常比窗口函数更有效
SELECT DISTINCT ON (sensor) sensor, time, value
FROM observations
ORDER BY sensor, time DESC