获取每个不同列值的最后一个条目
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.
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;
假设我有一个 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.
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;