2016-06-21 6 views
1

Ich habe unten eine Tabelle, in der ich sehen muss, ob sich die Zinssätze für eine beliebige Darlehensnummer innerhalb eines bestimmten Zeitraums geändert haben. Unten sind nur Beispieldaten, ich muss diese Informationen über 2 Millionen Zeilen finden. Wie kann das gemacht werden?Wie kann ich feststellen, ob sich Werte in einer Spalte über mehrere Daten hinweg geändert haben?

Beispieldaten

+------------+-------------+---------------+ 
| DATE | LOAN_NUMBER | INTEREST_RATE | 
+------------+-------------+---------------+ 
| 04/01/2010 |  1111122 | 0.375   | 
| 05/15/2011 |  1111122 | 0.375   | 
| 06/01/2012 |  1111122 | 0.300   | 
| 07/08/2010 |  1111133 | 0.400   | 
| 07/01/2011 |  1111133 | 0.450   | 
+------------+-------------+---------------+ 

Ich habe versucht, die folgendes zu tun:

Select A.Date, A.Loan_Number, A.Interest_Rate 
FROM TABLEX A 
INNER JOIN TABLEX B ON A.Loan_Number = B.Loan_Number 
AND A.Date < B.Date 

Aber dies nicht erhalten mir die Ergebnisse, die ich brauche.

Jede Hilfe wird geschätzt!

Antwort

0

Sie eine row_number verwenden könnte nächste Funktion wie

select b.* 
    from (
    Select [Date], Loan_Number, Interest_Rate,row_number() over(partition by Loan_Number order by [Date] desc, Interest_Rate desc) rowid 
    FROM TABLEX) A 
    join (
    Select [Date], Loan_Number, Interest_Rate,row_number() over(partition by Loan_Number order by [Date] desc, Interest_Rate desc) rowid 
    FROM TABLEX) B 
    on a.rowid = b.rowid -1 
    and a.Loan_Number = b.Loan_Number 
    where a.Interest_Rate <> b.Interest_Rate 
+0

Ich glaube nicht, das ist richtig. "multiple date" "date period" – Paparazzi

+0

Partition hinzugefügt von sollte nun funktionieren. – Kostya

+0

OK Ich denke immer noch nicht, dass das die Frage ist – Paparazzi

0
Select A.Date, A.Loan_Number, A.Interest_Rate 
    , B.Date, B.Interest_Rate 
FROM TABLEX A 
INNER JOIN TABLEX B 
ON A.Loan_Number = B.Loan_Number 
AND DateDiff(dd, A.Date, B.Date) =< 10 
AND DateDiff(dd, A.Date, B.Date) > 0 
AND A.INTEREST_RATE <> B.INTEREST_RATE 
0

Interest_Rate hat sich geändert zu imitieren bedeutet, dass MIN Wert nicht das gleiche wie MAX Wert ist.

Die Abfrage würde eine Liste aller Loan_Numbers für die Rückkehr der Interest_Rate innerhalb des vorgegebenen Zeitraums (von @StartDate inklusive bis @EndDate exklusiv) geändert hat.

SELECT A.Loan_Number 
FROM TABLEX A 
WHERE 
    A.Date >= @StartDate 
    AND A.Date < @EndDate 
GROUP BY A.Loan_Number 
HAVING MIN(A.Interest_Rate) <> MAX(A.Interest_Rate) 
; 
Verwandte Themen