2016-04-29 4 views
1

I-Daten haben, wie unten gezeigt,Wenn ein Wert vorherigen Wert in diesem Quartal, in SQL-Select-Abfrage

enter image description here

Jetzt möchte ich Ergebnis erhalten null erhalten, wie,

DateDisplayName Active 
Q2(Jun)-2015  736 
Q3(Sep)-2015  734 
Q4(Dec)-2015  NULL 
Q1(Mar)-2016  NULL 

Wenn also die Daten für den letzten Monat in diesem Quartal null sind, dann erhalten Sie vorletzte Daten. Bsp .: in Q3 Active ist Null für Sep, also ich Aug Daten zeigen sollte.

+0

Wo gibt es Augustdaten? Und welche Version von SQL verwenden Sie? –

+0

Wenn Sie sich das obige Bild ansehen, können Sie einen Datensatz mit 201508 sehen, der 2015Aug Daten ist, aber wir markieren ihn als Q3 (Sep) -2015. – Prasu

+1

Welche Version von SQL verwenden Sie? –

Antwort

2

Sie würden Ihre Aufzeichnungen bewerten. Verwenden Sie ROW_NUMBER, um den besten Datensatz pro Quartal Zeile Nummer 1 zu geben und dann nur diese zu behalten.

select 
    date_display_name, 
    active 
from 
(
    select 
    date_display_name, 
    active, 
    row_number() over 
    (
     partition by date_display_name 
     order by 
     case when active is null then 2 else 1 end, 
     defaultdate desc 
    ) as rn 
    from mytable 
) ranked 
where rn = 1; 
Verwandte Themen