获取每个不同列值的最后一个条目

Getting last entry for each of a distinct column value

假设我有一个 table 看起来像这样:

id | type | amount
------------------
1  | red  | 2
2  | blue | 71
3  | red  | 4
4  | blue | 11
5  | red  | 9
6  | blue | 16

我想为 type 的最后一个不同值编写一个 returns * 的查询。在这种情况下,type 的最后一行是 blue,而 type 的最后一行是 red。所以它会 return:

id | type | amount
------------------
5  | red  | 9
6  | blue | 16

我该怎么做?

您可以使用子查询查找类型的 max id 并将其 join 到主 table.

Fiddle with sample data

select id, t.type, amount
from (select max(id) as maxid, type from tablename group by type) x
join tablename t on t.id = x.maxid and t.type = x.type

在 Postgres 中执行此操作的一种简单方法是使用 distinct on:

select distinct on (type) id, type, amount
from table
order by type, id desc;