代码之家  ›  专栏  ›  技术社区  ›  Kirill

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

  •  0
  • Kirill  · 技术社区  · 7 年前

    我有一张有三列的桌子: key , value 和 timestamp , the 钥匙 列已编入索引,数据如下:

     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
    

    如何为每个distinct选择最早的值 钥匙 在桌子上? 我需要这些输出:

     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 回复  |  直到 7 年前
        1
  •  6
  •   Gordon Linoff    7 年前

    使用 distinct on :

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

    这通常是Postgres中最有效的方法。特别是,它可以利用 (key, timestamp) 为了表现。