我有一个包含三列的表:key
,value
和timestamp
,索引key
的列,数据看起来像:
key | value | timestamp
-----+-------+---------------------
A | 1.3 | 2018-12-30 00:00:00
A | 1.1 | 2018-12-29 00:00:00
C | 1.1 | 2019-01-02 00:00:00
B | 0.1 | 2019-01-02 00:00:00
B | 0.3 | 2018-12-30 00:00:00
A | 1.1 | 2018-12-31 00:00:00
B | 0.2 | 2019-01-01 00:00:00
A | 0.9 | 2019-01-02 00:00:00
如何为表中每个不同的key
选择最早的值?
我需要这些输出:
key | value | timestamp
-----+-------+---------------------
A | 1.1 | 2018-12-29 00:00:00
B | 0.3 | 2018-12-30 00:00:00
C | 1.1 | 2019-01-02 00:00:00
答案 0 :(得分:6)
使用distinct on
:
select distinct on (key) t.*
from t
order by key, timestamp;
这通常是Postgres中最有效的方法。特别是,它可以利用(key, timestamp)
上的索引来提高性能。