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.

 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