2016-08-02 9 views
-1

Ich habe eine longitudinale Tabelle, die unter anderem mit Daten und Salden gefüllt ist. Ich muss 6 Variablen extrahieren, die die Bilanzen für jedes der letzten 6 Monate enthalten. Dies scheint, als ob es unglaublich einfach sein sollte, aber ich habe bisher kein Glück gehabt, Fall oder wenn Aussagen innerhalb wählen.Erhalten von historischen Werten von SQL

Mein gesamtes Programm durchläuft meine Daten nach Datum.

mit einer Tabelle, die etwa wie folgt aussieht:

col1 |col2 |account |date |balance |col3 |col4 
-------------------------------------------------------------- 
     |  |123456  |Jul-16 |1200  |  | 
     |  |123456  |Jun-16 |1100  |  | 
     |  |123456  |May-16 |1000  |  | 
     |  |123456  |Apr-16 |900  |  | 
     |  |123456  |Mar-16 |800  |  | 
     |  |123456  |Feb-16 |700  |  | 
     |  |123456  |Jan-16 |600  |  | 
     |  |123456  |Dec-15 |500  |  | 
     |  |123456  |Nov-15 |400  |  | 
     |  |123456  |Oct-15 |300  |  | 
     |  |123456  |Sep-15 |200  |  | 
     |  |123456  |Aug-15 |100  |  | 
     |  |234567  |Jul-16 |-500  |  | 
     |  |234567  |Jun-16 |-400  |  | 
     |  |234567  |May-16 |-600  |  | 
     |  |234567  |Apr-16 |-500  |  | 
     |  |234567  |Mar-16 |-200  |  | 
     |  |234567  |Feb-16 |-400  |  | 
     |  |345678  |Jul-16 |100  |  | 
     |  |345678  |Jun-16 |200  |  | 
     |  |345678  |May-16 |300  |  | 
     |  |345678  |Apr-16 |400  |  | 
     |  |345678  |Mar-16 |500  |  |  

I Variablen b1-b6 erfordern würde mir das Gleichgewicht für jedes Konto in den letzten 6 Monaten geben.

+4

Bitte geben Sie die Tabellendefinition, die Daten und die erwarteten Ergebnisse an. Auch RDBMS-Anbieter und Version. – vercelli

+0

Es wäre einfacher, Hilfe zu bekommen, wenn Sie die Schema-Gliederung Ihrer Tabellen und ein Beispiel für die gewünschte Ausgabe zeigen. – zulq

+0

Ich habe versucht, Fallanweisungen und If-Schleifen zu verwenden. Die Daten sind sensibel, daher müsste ich sie vor dem Posten einer Probe untersuchen. Ich werde sehen, ob ich mir einen falschen Beispieltisch ausdenken kann, aber ich arbeite mich gerade aus. – Zephyr

Antwort

1

Es ist schwierig zu sagen, ob dies genau das ist, was Sie suchen, aber wenn Sie nach dem Kontostand für jedes Konto über 6 Monate suchen, können die folgenden helfen.

SELECT account, SUM(balance) 
    FROM Table_1 
    WHERE date >= '2013-02-02' AND 
      date <= '2013-08-02' 
GROUP BY account 

Die ‚GROUP BY‘ -Funktion wird das aggregierte Variable oder SUM(balance) von jedem ‚Konto‘ zusammenfassen und die WHERE-Klausel wird die aggregierte Wert für den Datumsbereich zurückzukehren. Sie könnten die anderen Variablen in die SELECT-Anweisung und die 'GROUP BY' hinzufügen.

1

Obwohl dies im Grunde ein Top-N pro Gruppe Problem ist, sieht es so aus, als ob Sie jeden Monat konsistent Daten haben, die es einfacher zu handhaben machen sollten.

select t.* 
from 
    <T> t inner join 
    (select account, max(date) as max_date from <T> group by account) m 
     on m.account = t.account and t.date > max_date - 6 months /* pseudo-code */ 

Sie müssen den sechsmonatigen Look-back gemäß Ihren Geschäftsregeln berechnen. Es kann auch einige kleine Komplikationen mit Daten gegen Ende des Monats (insbesondere Februar) geben. Dies ist nur eine grobe Vorlage eines Ansatzes, der wahrscheinlich auf Ihrer Plattform arbeiten wird. Und je nach Annahmen können Sie Möglichkeiten zur Optimierung anbieten.

Verwandte Themen