【发布时间】:2015-01-29 13:40:39
【问题描述】:
我一直在使用 DISTINCT ON 谓词,并决定将其替换为 GROUP BY,主要是因为它“不是 SQL 标准的一部分,由于其结果可能具有不确定性,因此有时被认为是不好的样式”。
我将 DISTINCT ON 与 ORDER BY 结合使用以选择历史记录表中的最新记录,但我不清楚如何对 GROUP BY 执行相同操作。 什么是从一个构造转移到另一个构造的通用方法?
一个例子可以是
SELECT
DISTINCT ON (f1, f2 ) *
FROM table
ORDER BY f1, f2, datefield DESC;
我得到“最新”的 (f1,f2) 对。
【问题讨论】:
-
。 .请展示您的查询示例。
-
第 7.3.3 章不鼓励使用 DISTINCT ON。一旦我找到那封电子邮件,我会在这里引用它关于计划器和“distinct on”优化的内容。
-
改写了我的问题
-
"其结果的潜在不确定性" - 仅当您忘记
order by或指定不稳定的排序顺序时(例如,重复值可能出现在排序列) - 但该问题也适用于使用窗口函数的解决方案。
标签: sql postgresql group-by distinct-on