Postgres 在 groupby 和 max 之后选择 *
Posted
技术标签:
【中文标题】Postgres 在 groupby 和 max 之后选择 *【英文标题】:Postgres select * after groupby and max 【发布时间】:2020-12-19 18:03:07 【问题描述】:考虑一个具有 id PK 和 26 列的表。 (a,b)
上有索引
id | a | b | c | d | e ... | z |
--------------------------------
我正在尝试选择 (a,b)
的唯一配对最近的行。 IE 每个(a,b)
的最后一条记录是什么因为ID 是自动递增的,所以知道最大值是最后一行。
SELECT MAX(id), a, b
FROM table GROUP BY (a, b)
但是,有没有办法让SELECT
显示所有列而不手动列出它们,例如。
SELECT MAX(ID), a, b, c ... z
我尝试了以下方法无济于事
SELECT MAX(ID), *
SELECT MAX(ID), table.*
【问题讨论】:
对这类情况使用“distinct”。 【参考方案1】:在 Postgres 中,distinct on
很方便:
select distinct on (a, b) t.*
from mytable t
order by a, b, id desc
【讨论】:
啊,谢谢伙计。我最初尝试过这个但做了order by a,b
而不是order by a, b, id desc
。谢谢 - id 参考解决了它!只是好奇,如果id desc
我使用b desc
,为什么会失败?比如你怎么知道id
是必须下降的字段?我真的很想显示按a, b
而不是a, b, id
排序的表格,因为这有点乱。我想我可以用 CTW 进行二次排序
@AdamHughes:这为每个(a, b)
元组提供一行,结果按(a, b)
排序。 order by
子句必须以与distinct on
子句中相同的列开头,后跟一列(或一组列)以标识应为每个组保留的记录。你想要最新的记录id
,所以id desc
。以上是关于Postgres 在 groupby 和 max 之后选择 *的主要内容,如果未能解决你的问题,请参考以下文章
如何优化 Postgresql max_connections 和 node-postgres 连接池?
从 postgres 中的子网/掩码获取 MAX 和 MIN ip
Scala - 对 RDD 上的 Groupby 和 Max
Postgres:增加 bdr.max_databases 变量失败