为表中的每个不同键选择最后排序的值

Kir*_*ill 0 sql postgresql

我有一个包含三列的表: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
Run Code Online (Sandbox Code Playgroud)

如何为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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

用途distinct on:

select distinct on (key) t.*
from t
order by key, timestamp;
Run Code Online (Sandbox Code Playgroud)

这通常是Postgres中最有效的方法.特别是,它可以利用索引来(key, timestamp)提高性能.