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 に答える