【问题标题】:Postgresql query to retrive last inserted row for each idPostgresql 查询以检索每个 id 的最后插入行
【发布时间】:2021-05-24 07:18:15
【问题描述】:

假设我有 PostgreSQL 数据库表,其数据如下。此处使用的 lat 和 long 值的一些随机值。

id date lat long
1 2014-02-01 10 20.12
1 2014-02-01 20 30
1 2014-02-01 12 14
2 2014-02-02 12 16
2 2014-02-02 18 22
3 2014-06-12 23 10
3 2014-06-12 15 12
3 2014-06-12 85 72

每个 id 的日期列具有相同的日期(例如,id 1 的所有行都有 2014-02-01),在这种情况下如何检索每个 id 的最后插入的 long 和 lat(坐标)?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:
     SELECT COL1,MAX(COL2)
     FROM TABLEA 
     GROUP BY COL1
    

    你可能需要这个吗?

    【讨论】:

      【解决方案2】:

      你不能。 SQL 表表示无序(多)集。也就是说,没有排序,没有“最后插入”*除非列具有该信息。

      存储此信息的两种典型方法:

      • identity 列(或等效的 serial 列)。
      • created 时间戳(不完美,因为可能存在重复)。

      如果你有这样的专栏,那么 Postgres 提供distinct on,这是一种非常方便的方式:

      select distinct on (id) t.*
      from t
      order by id, <ordering col> desc;
      

      您可能希望使用自动生成的identity 列重新创建数据,以便捕获广告订单。

      【讨论】:

        【解决方案3】:
        SELECT DISTINCT ON(id), lat, long
        FROM tableName
        ORDER BY id;
        

        此查询为您提供每个 id 最后插入的 lat and long

        【讨论】:

        • 不完全正确。如果没有另一列来指定顺序,您将无法预测具有相同 ID 的行的顺序。您不仅无法预测订单的顺序,而且订单可能因运行而异。
        猜你喜欢
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 2011-02-26
        • 2015-09-30
        • 1970-01-01
        相关资源
        最近更新 更多