我有一个 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/