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

如何使用Postgres进行查询以获取与列表匹配的最后一行?

  •  0
  • Thomas  · 技术社区  · 5 年前

    name varchar,
    ts timestamp,
    val int,
    UNIQUE (name, ts)
    

    我将数据作为一批推送到数据库。该批处理中的每一行都有相同的时间戳。

    我想做一个查询,在那里我可以得到上一批中的所有行。

    例如,如果我有:

    ts           name     val
    2020-01-01   joe      3
    2020-01-01   eric     5
    2020-01-01   amelia   9
    2020-01-01   marcel   2
    2020-01-01   erika    3
    2020-01-02   joe      6
    2020-01-02   amelia   8
    2020-01-02   marcel   9
    2020-01-02   erika    5
    
    

    输出应为:

    ts           name     val
    2020-01-02   joe      6
    2020-01-02   amelia   8
    
    

    所以我想做一个查询来知道最新的时间戳是什么,然后做一个需要这个时间戳的查询。有没有一种方法可以在单个查询中完成? 另外,在这种情况下,如何传递姓名列表(我是SQL的初学者)

    1 回复  |  直到 5 年前
        1
  •  0
  •   Steeeve    5 年前

    代替 桌子

    SELECT * FROM table WHERE ts = (SELECT max(ts) FROM table)
    

    如果只需要某些名称,请添加:

    AND name IN ('joe', 'amelia')
    

    请注意:在一个事务中为您提供了 now() 无论事务运行多长时间,始终保持相同的值。