sql - 仅选择表中每个标识符的最新值

标签 sql database postgresql select greatest-n-per-group

我有一个看起来像这样的表:

identifier | value | tstamp
-----------+-------+---------------------
abc        | 21    | 2014-01-05 05:24:31
xyz        | 16    | 2014-01-11 03:32:04
sdf        | 11    | 2014-02-06 07:04:24
qwe        | 24    | 2014-02-14 02:12:07
abc        | 23    | 2014-02-17 08:45:24
sdf        | 15    | 2014-03-21 11:23:17
xyz        | 19    | 2014-03-27 09:52:37

我知道如何获取单个标识符的最新值:

select * from table where identifier = 'abc' order by tstamp desc limit 1;

但我想获取所有标识符的最新值。我该怎么做?

最佳答案

最简单(通常也是最快)的方法是在 Postgres 中使用 DISTINCT ON:

SELECT DISTINCT ON (identifier) *
FROM   tbl
ORDER  BY identifier, tstamp DESC;

这也会返回一个有序列表。
SQLFiddle.
详情:
Select first row in each GROUP BY group?

关于sql - 仅选择表中每个标识符的最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048034/

相关文章:

mysql - 通过查询计算 SQLiteDB 的下四分位数和上四分位数

MySQL用FK表中的数据替换结果表中的外键

mysql - 选择内部不同

sql - 在 Postgres 中,使用 "attempts"时是否可以使用 ROLLBACK TO SAVEPOINT 来实现 "FOR UPDATE SKIP LOCKED"?

javascript - 从 Sails.js 中的关联模型访问模型的属性

mysql - 过滤 mysql 数据透视查询而不丢失所选记录的过滤字段

java - 删除重复项方法不会删除重复项

sql - 以 'select statement' 格式从函数返回结果

mysql - 将 MySQL SELECT 中的日期格式化为 ISO 8601

postgresql - 修改pg_hba.conf