【问题标题】:Postgres select * after groupby and maxPostgres 在 groupby 和 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”。

标签: python sql postgresql max greatest-n-per-group


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多