Gruppierung nach Zeitraum in t-sql
Ich versuche eine Abfrage auf diese Tabelle:
Id startdate enddate amount
1 2013-01-01 2013-01-31 0.00
2 2013-02-01 2013-02-28 0.00
3 2013-03-01 2013-03-31 245
4 2013-04-01 2013-04-30 529
5 2013-05-01 2013-05-31 0.00
6 2013-06-01 2013-06-30 383
7 2013-07-01 2013-07-31 0.00
8 2013-08-01 2013-08-31 0.00
Möchte ich die Ausgabe:
2013-01-01 2013-02-28 0
2013-03-01 2013-06-30 1157
2013-07-01 2013-08-31 0
Wollte ich das Ergebnis, so würde ich wissen, wenn das Geld begannen zu kommen und wenn es gestoppt. Ich bin auch daran interessiert, die Anzahl der Monate, bevor das Geld begann kommen in (die erklärt, dass die in der ersten Zeile), und die Anzahl der Monate, wo das Geld aufgehört hat (was erklärt, warum ich interessiere mich auch für die 3. Reihe für Juli 2013 bis Aug 2013).
Ich weiß, dass ich verwenden können, min und max auf das Datum und die Summe auf dem Betrag, aber ich kann nicht herausfinden, wie man die Datensätze geteilt, so.
Danke!
- vielen Dank für das Bearbeiten Mahmoud Gamal. Ich war versucht, die Frage zu stellen, von meinem android-Handy.
- Basierend auf was willst du die Gruppierung?
- Es sieht aus wie Sie möchten-Gruppe aufeinander folgenden Zeilen von null und nicht null, aber warum würde Sie nicht trennen Kann die Reihe?
- Er versucht zu erstellen, die drei Scheiben für die Daten - (1) kein Geld kommen, (2) Geld kommen, (3) keine Geld kommen wieder. Die zwei Perioden der Trockenheit wird die Buchstütze der Zeit, als das Geld ankam.
- basierend auf inklusive Termine, wo der Betrag ist null und nicht null.
- ja, @Igitt ist die richtige. Ich würde nicht wollen, zu trennen, der Kann die Zeile, denn Geld war noch im Juni kommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Idee (und ein Turnschuh mit ihm zu gehen):
Und eine zweite, ohne
UNION
(fiddle):obwohl ich vermute, wie geschrieben es wird davon ausgegangen
Id
sind in Ordnung. Sie ersetzen könnte, dies mit einerROW_NUMBER() OVER(ORDER BY startdate)
.UNION
oder Variablen.SQLFiddle demo
Etwas mag, der sollte es tun :
Aber für diese Art von Berichterstattung, Es ist wahrscheinlich mehr die explizite Verwendung von mehreren Abfragen.
Das tut, was Sie wollen:
Wenn alles, was Sie tun möchten, ist zu sehen, wenn das Geld begann kommen in, und wenn es gestoppt, könnte dies für Sie arbeiten:
Dies würde nicht zählen die Zeiten, wo es kein Geld kommen, wenn.
Wenn Sie nicht über die gesamte Pflege in der Zeit, sondern nur die Datensätze, wo Sie gehen von 0 bis irgendwas, und Umgekehrt, könnten Sie tun etwas verrückt wie dieses:
Oder wenn Sie müssen den ersten Eintrag:
Sql Fiddle