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

时间:2019-02-11 12:33:01

标签: sql postgresql

我有一个包含三列的表:keyvaluetimestamp,索引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

1 个答案:

答案 0 :(得分:6)

使用distinct on

select distinct on (key) t.*
from t
order by key, timestamp;

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