Oracle Query zum Rollup von QTY nach Jahr – nur letzte 3 Jahre

Ich habe eine Anforderung, MAX-WERT von SUM von Mengen zu finden, die durch JAHR geteilt werden (Notwendigkeit, eine Oracle-Abfrage zu schreiben).

Beispielsweise

ITEM_ID ORG_ID YEAR QTY 100 121 2015 10 100 121 2016 5 100 121 2017 8 101 146 2014 10 101 146 2015 11 101 146 2016 12 101 146 2017 13 

Meine Ausgabe sollte so sein:

for Item_id 100,121 the max_avg should be max(10+5+8/3, 5+10/2, 10/1)... max (7.6, 7.5, 8) = 8
for Item_id 101,146 the max_avg should be (11+12+13/3, 12+13/2, 13/1)... max(11.5, 12, 12.5, 13) = 13... I should not consider 10+11+12+13/4 . Ich brauche nur den AVG der letzten 3 Jahre zusammengerollt und den Max Value zuzuordnen

  ITEM_ID ORG_ID YEAR QTY MAX_AVG 100 121 2015 10 8 100 121 2016 5 8 100 121 2017 8 8 101 146 2014 10 13 101 146 2015 11 13 101 146 2016 12 13 101 146 2017 13 13 

Jede Hilfe würde sehr geschätzt werden.

Solutions Collecting From Web of "Oracle Query zum Rollup von QTY nach Jahr – nur letzte 3 Jahre"

 select item_id, org_id, yr, qty, greatest ( avg(case when yr = 2017 then qty end) over (partition by item_id, org_id), avg(case when yr in (2016, 2017) then qty end) over (partition by item_id, org_id), avg(case when yr in (2015, 2016, 2017) then qty end) over (partition by item_id, org_id) ) as max_avg from inputs_table ; 

Eine Methode verwendet zwei Ebenen analytischer functionen:

 select t.*, max(running_avg_3) over (partition by item_id) from (select t.*, avg(qty) over (partition by item_id order by year desc rows between current row and 2 following ) as running_avg_3 from t ) t