Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql查询以检索每个id最后插入的行_Sql_Postgresql - Fatal编程技术网

Postgresql查询以检索每个id最后插入的行

Postgresql查询以检索每个id最后插入的行,sql,postgresql,Sql,Postgresql,假设我有如下数据的PostgreSQL数据库表。此处使用的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 你可能需要这个吗?你不能。SQL表表示无序(多)集。也就

假设我有如下数据的PostgreSQL数据库表。此处使用的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
你可能需要这个吗?

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

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

  • identity
    列(或相当于
    serial
    列)
  • 创建的
    时间戳(这并不完美,因为可能存在重复项)
如果您有这样一个专栏,那么Postgres提供了
distinct on
,这是一种非常方便的方式:

select distinct on (id) t.*
from t
order by id, <ordering col> desc;
在(id)t上选择distinct*
从t
按id排序,描述;
您可能希望使用自动生成的
identity
列重新创建数据,以便捕获插入顺序

SELECT DISTINCT ON(id), lat, long
FROM tableName
ORDER BY id;

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

不完全正确。如果没有另一列指定顺序,则无法预测具有相同id的行的顺序。不仅无法预测顺序,而且顺序可能会因运行而异。
SELECT DISTINCT ON(id), lat, long
FROM tableName
ORDER BY id;