2

我一直在使用 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)对。

4

1 回答 1

2

如果您有这样的查询:

select distinct on (col1) t.*
from table t
order by col1, col2

然后你会用窗口函数代替它,而不是group by

select t.*
from (select t.*,
             row_number() over (partition by col1 order by col2) as seqnum
      from table t
     ) t
where seqnum = 1;
于 2015-01-29T13:44:28.053 回答