sql select with group by 并加入查找

标签 sql postgresql greatest-n-per-group

假设我有一个产品表和一个订单表。我想列出每个产品的最新订单

我想像这样

select name, description, price, max(date) 
from product 
  join order on order.item = product.name 
group by order.item

但是我的 postgres 数据库提示说我不能有原始字段(sqlite 没有提示)我需要有聚合函数。我可以为每一列放置 min() 但这似乎是一种浪费,因为特定产品的所有值始终相同。我想知道“不同”,但这似乎对这里没有帮助

注意 - 我需要标准的可移植 SQL,而不是特定于任何给定的引擎。

最佳答案

在 Postgres 中,您可以使用 distinct on:

select distinct on (o.item) p.name, description, price, date
from product p join
     order o
     on o.item = p.name
order by o.item, date desc;

我在查询中添加了别名。我强烈建议您始终限定所有列名。我会这样做,但在大多数情况下我不知道它们来自哪里。

关于sql select with group by 并加入查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51990200/

相关文章:

MySQL,多表更新和奇怪的结果

mysql - 如何获取每组中的最大值和最小值以及它们的时间?

mysql - INNER JOIN 后从多个表中获取最大日期

sql - 如何在查询多个表的多列时从单个表的单列使用MAX

sql - 如何在 sql 中获取 123456 个数字的前 3 位数字?

sql - 如何在 PostgreSQL 中将表设置为只读

mysql - 在mysql中创建关系表

postgresql - 用于时间序列的 Postgres hstore

java - 如何使用 hibernate 和 postrgresql 跨程序的多个实例锁定记录?

sql - 我如何在 Postgres 中优化这个 SQL 查询?