2016-06-21 1 views
1

Ich habe folgende TabelleWie Pickup letzten und vorletzten Zeitpunkt der Verwendung von Oracle-Abfrage

Tabelle PRODUKT:

PRO_ID PRO_Date PRO_Price 
123  1/1/2016 2000 
123  2/1/2016 2500 
123  3/1/2016 1500 
123  5/1/2016 3000 
456  1/1/2016 2000 
456  2/1/2016 2500 
456  3/1/2016 1500 
456  5/1/2016 3000 
456  6/1/2016 3500 

Abfrage zur Zeit mit:

select PRO_ID, max(PRO_DATE) as Last_PRO_Date 
from 
(select PRO_ID, PRO_DATE from PRODUCT where PRO_DATE<='01-JUN-2016') 
group by PRO_ID 

Ausgang zur Zeit bekommen:

PRO_ID Last_PRO_Date 
123  5/1/2016  
456  6/1/2016  

Aber jetzt ich will auch Abholung vorletztes Datum verfügbar.

Erwartete Ausgabe/Erforderlich Ausgabe:

PRO_ID Last_PRO_Date Second_Last_PRO_Date 
123  5/1/2016  3/1/2016 
456  6/1/2016  5/1/2016 

Antwort

2

Sie Ihre Anfrage ohne Unterabfrage schreiben:

select PRO_ID, MAX(PRO_DATE) as Last_PRO_Date 
from PRODUCT 
where PRO_DATE <= '01-JUN-2016' 
group by PRO_ID; 

jedoch für die letzten zwei Tage, würde ich dense_rank() und Aggregation:

select PRO_ID, 
     max(casse when seqnum = 1 then PRO_DATE end) as Last_PRO_Date, 
     max(casse when seqnum = 2 then PRO_DATE end) as Second_Last_PRO_Date 
from (select PRO_ID, PRO_DATE, 
      dense_rank() over (partition by PRO_ID order by PRO_DATE desc) as seqnum 
     from PRODUCT 
     where PRO_DATE <= '01-JUN-2016' 
    ) t 
group by PRO_ID; 
+0

Danke, es funktioniert einwandfrei – Qasim0787

Verwandte Themen