2016-03-10 48 views
0

我有一个PostgreSQL数据库表,其中包含测量结果。每个测量都有一个测量已经执行的时间列,一个包含该测量结果的度量标准列和一个标识正在测量的对象的标识符。选择最新的测量结果

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

我的方法是通过标识符和乱七八糟的时间降序排序,最后消除仅保留每个标识符的第一行的重复项。我也只想要返回指标列。它是如何完成的?

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

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

(10 rows) 

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

我使用Ubuntu

+0

该代字号仅显示其余输出为空。 – choroba

回答

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);