複数グループの中にある先頭行を取得したい
グループ化されたレコードの中から。先頭の行だけを出力したいことがたまにあります。
そんな時に使用できるのが、分析系の partition by になります。
partition by
例えば、次のテーブルがあるとします。

この中から製品がどこの作業にあるのかを知りたいとすると、次のような結果が欲しくなります。

欲しい結果は、製品Aの未作業のうち最も oeration_order が小さい作業2と製品Bの未作業のうち最も oeration_order が小さい作業3になります。
そこで、 partition by を使ってグループごとに処理が行われるようにしてみます。
SELECT
name
,operation_order
,operation
,progress
,ROW_NUMBER()
ORVER(PARTITION BY name ORDER BY operation_order ) row_num
FROM sample
WHERE progress IS NULL;
上記SQL文を実行すると PARTITION BY で指定したグループごとに処理されます。この場合、 name のグループ単位に行番号が振られ次のような結果が得られます。

今回ほしい結果は、「グループ化されたレコードの中から先頭の行だけを出力したい」という事でしたので、先頭行だけ抽出するよう条件を追加します。
SELECT *
FROM
(
SELECT
name
,operation_order
,operation
,progress
,ROW_NUMBER()
ORVER(PARTITION BY name ORDER BY operation_order ) row_num
FROM sample
WHERE progress IS NULL
)
WHERE row_num = 1;

以上でほしい結果が得られるようになりました。