我想运行这个查询:
SELECT DISTINCT ON (address_id) purchases.address_id, purchases.*
FROM purchases
WHERE purchases.product_id = 1
ORDER BY purchases.purchased_at DESC
但我得到这个错误:
PG::Error: ERROR: SELECT DISTINCT ON 表达式必须匹配初始 ORDER BY 表达式
添加 address_id
作为第一个 ORDER BY
表达式可以消除错误,但我真的不想在 address_id
上添加排序。是否可以不按 address_id
订购?
原文由 sl_bug 发布,翻译遵循 CC BY-SA 4.0 许可协议
文档说:
官方文档
因此,您必须将
address_id
添加到 order by。或者,如果您正在寻找包含每个
address_id
的最新购买产品的完整行,并且该结果按purchased_at
排序,那么您正在尝试解决最大的 N per可以通过以下方法解决的组问题:适用于大多数 DBMS 的通用解决方案:
基于@hkf 的答案的更面向 PostgreSQL 的解决方案:
问题在这里得到了澄清、扩展和解决: 选择按某列排序的行和另一列不同的行