sql - 选择最新的测量结果

标签 sql linux postgresql ubuntu

我有一个 PostgreSQL包含测量结果的数据库表。每个测量都有一个执行测量的时间列、一个包含该测量结果的指标列和一个标识被测量对象的标识符。

由于表格包含同一对象的多个测量值,我只想选择每个对象的最新测量值。

我的方法是按标识符和困惑时间降序排列,最后消除重复项,只保留每个标识符的第一行。我也只希望返回指标列。它是怎么做到的?

SELECT DISTINCT ON(id) FROM measurements ORDER by id, messon DESC LIMIT 10;

不仅这个查询需要一段时间,结果行也只有波浪号 (~) 符号:

(10 rows)

~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~

我正在使用 Ubuntu .

最佳答案

你忘了说你想看哪些列:

SELECT DISTINCT ON(id) * FROM measurements ORDER by id, messon DESC LIMIT 10;

注意声明中的星号。

关于速度问题,你有没有创建一个ordered index在 id 和 messon 列上?

CREATE INDEX CONCURRENTLY id_messon_desc_idx ON measurements (id DESC, messon DESC);

关于sql - 选择最新的测量结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35920099/

相关文章:

python - PostgreSQL 存在于何处

MySql 更新 : Can't specify target table for update in FROM clause

Linux:这是并行运行脚本的正确方法吗?

postgresql - 当查询和复制同时发生时,Postgresql 上的复制暂停

postgresql - 防止Postgresql中递归查询中的无限循环

python - 将 Vabinary(Max) 更改回文本<MS SQL "2005">

mysql - 从表列表中选择相同的列

用于交互式 SSH session 的 Java 库(能够执行多部分命令)?

linux - 在 Linux 中的 Javascript 中使用 ActiveX 对象(在 Firefox 中)

node.js - 如何使用 Node.js net.Socket 像使用终端一样与 Postgresql 数据库通信