我有一个包含测量结果的PostgreSQL
数据库表。每个测量都有一个测量时间列,一个包含该测量结果的度量列和一个标识所测量对象的标识符。
由于该表包含同一对象的多个测量值,因此我只想选择每个对象的最新测量值。
我的方法是通过标识符和乱码时间降序排序,最后消除仅保留每个标识符的第一行的重复项。我也只想要返回指标列。怎么做?
SELECT DISTINCT ON(id) FROM measurements ORDER by id, messon DESC LIMIT 10;
此查询不仅需要一段时间,结果行也只是波浪号(~
)符号:
(10 rows)
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
我正在使用Ubuntu
。
答案 0 :(得分:2)
您忘了说想要查看哪些列:
SELECT DISTINCT ON(id) * FROM measurements ORDER by id, messon DESC LIMIT 10;
请注意声明中的星号。
关于速度问题,您是否在id和messon列上创建了ordered index?
CREATE INDEX CONCURRENTLY id_messon_desc_idx ON measurements (id DESC, messon DESC);