質問: 【途中の集計結果】 出荷表 | 受注番号 | 明細番号 | 枝番 | 出荷完了日付 | | --- | --- | --- | --- | | A | 1 | 1 | 2019/1/10 | | A | 1 | 2 | null | | B | 1 | 1 | 2019/1/1 | | B | 1 | 2 | 2019/2/10 | | C | 1 | 1 | null | | C | 2 | 1 | 2019/2/10 | 上記を以下の条件でまとめたいです。 1.受注番号・明細番号単位で表示させる。 2.出荷完了日付が上記単位で全部埋まっていない場合は表示しない(nullにする。) 3.出荷完了日付が上記単位で全部埋まっている(出荷完了している)場合、最遅のものを表示する。 【最終的に欲しい結果】 | 受注番号 | 明細番号 | 出荷完了日付 | | --- | --- | --- | | A | 1 | null | | B | 1 | 2019/2/10 | | C | 1 | null | | C | 2 | 2019/2/10 | 複数行にわたって条件を見なければならないので、集計関数を用いたりするのだと思うのですが、なかなかうまく行きません・・・。 知恵をお貸しください。よろしくお願いします。 ちなみに・・・ 受注番号・明細番号単位で、出荷完了していないものについては、以下のSQLで抽出できそうです。 SELECT DISTINCT 受注番号, 明細番号, 出荷完了日付 FROM 出荷表 WHERE 出荷完了日付 IS NULL;
回答: **keep構文**を用いて**NUllを最大値**として指定します。 ``` select 受注番号, 明細番号 , max(出荷完了日付) keep (dense_rank last order by 出荷完了日付 nulls last) from 出荷表 group by 受注番号, 明細番号 ``` ソートしたレコードの最終行に集計関数を使用する( KEEP、LAST ) カラムにnullが含まれるなら結果がnullになるmax()