Oracle集計関数 - ウィンドウ関数の後に他の列データを取得する方法

Oracle の集計関数は、group by グループ化の後に実行されるため、partition by などの集計関数でのグループ化は、全体の選択が完了した後に結果セットで実行されます。集計関数グループ化; 集計関数は、集計の基礎として group by group を使用するか、partition by を使用してグループ自体を定義し、集計操作を実行できます。

ウィンドウ関数と集計関数の違い

集計関数は通常、集計結果と集計のキー フィールドのみを返します. 集計された列以外の列の値を返す必要がある場合は、ウィンドウ関数を使用する必要があります. 集計関数とは異なり、ウィンドウ関数は集計結果を元の結果セットにマージします


使用シナリオ: たとえば、テーブル Table1 に列 KEY、VALUE、および DATE があります。

キー(学生) 値(グレード) DATE(日付)
張三 89 2021/01/02
張三 72 2021/11/12
李思 63 2021/10/12
李思 91 2021/11/14

特定のビジネスでは、学生に従って要約し、重複を削除し、最新の日付の
Group BY ステートメントの結果のみを取得する必要があります。

SELECT A.KEY,A.VALUE,A.DATE FROM TABLE1 A
 (SELECT MAX(DATE),KEY FROM TABLE1 GROUP BY KEY) B
WHERE A.KEY = B.KEY AND  A.DATE = B.DATE

GROUP BY の結果:

キー(学生) 値(グレード) DATE(日付)
張三 72 2021/11/12
李思 91 2021/11/14

ウィンドウ関数 FIRST_VALUE を使用して、KEY で集計した後、ORDER で並べ替えられた最初の項目を取得します。
FIRST_VALUE(A.VALUE)OVER( PARTITION BY A.KEY ORDER BY A.DATE DESC)

SELECT KEY,FIRST_VALUE(A.VALUE)OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS NVALUE,VALUE,DATE FROM TABLE1 A

ウィンドウ関数の結果

キー(学生) 値(グレード) NVALUE(最新グレード) DATE(日付)
張三 89 72 2021/01/02
張三 72 72 2021/11/12
李思 63 91 2021/10/12
李思 91 91 2021/11/14

次に、重複を削除し、ROW_NUMBER() を使用して同じ種類のデータを記録し、最新のアイテムを除外します
ROW_NUMBER() OVER( PARTITION BY A.KEY ORDER BY A.DATE DESC)

SELECT * FROM (SELECT KEY,FIRST_VALUE(A.VALUE)OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS NVALUE,ROW_NUMBER() OVER(
PARTITION BY A.KEY ORDER BY A.DATE DESC) AS 
RWORDER ,VALUE,DATE FROM TABLE1 A) WHERE RWORDER =1

最終結果

キー(学生) 値(グレード) NVALUE(最新グレード) DATE(日付) んん
張三 72 72 2021/11/12 1
李思 91 91 2021/11/14 1

https://blog.csdn.net/qq_41708308/article/details/89374701
https://blog.csdn.net/qq_37816503/article/details/108408875

おすすめ

転載: blog.csdn.net/Maxiao1204/article/details/129245978