SQL count aufeinanderfolgenden Tagen
Dies ist die SQL-Datenbank Daten:
UserTable
UserName | UserDate | UserCode
-------------------------------------------
user1 | 08-31-2014 | 232
user1 | 09-01-2014 | 232
user1 | 09-02-2014 | 0
user1 | 09-03-2014 | 121
user1 | 09-08-2014 | 122
user1 | 09-09-2014 | 0
user1 | 09-10-2014 | 144
user1 | 09-11-2014 | 166
user2 | 09-01-2014 | 177
user2 | 09-04-2014 | 188
user2 | 09-05-2014 | 199
user2 | 09-06-2014 | 0
user2 | 09-07-2014 | 155
Sollte nur zählen, aufeinander folgenden Tagen (als Ergebnis), wenn [UserCode] ist etwas anderes als null.
UserDate zwischen 09-01-2014 und 09-11-2014.
Das Ergebnis zeigen die nur bei 2 oder mehr.
Was ich will zu meiner sql Abfrage ist:
UserName | StartDate | EndDate | Result
----------------------------------------------------------
user1 | 09-01-2014 | 09-03-2014 | 2
user1 | 09-08-2014 | 09-11-2014 | 3
user2 | 09-04-2014 | 09-07-2014 | 3
Ist das möglich, nur mithilfe von SQL-Abfrage?
Welche version von mssql verwenden Sie?
InformationsquelleAutor majukivi | 2014-09-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Lücken und Inseln problem. Der einfachste Weg, dies zu lösen, ist die Verwendung
ROW_NUMBER()
zu identifizieren, die Lücken in der Sequenz:Gibt es:
Wie Sie sehen können, gibt einen Konstanten Wert in
GroupingSet
für aufeinander folgende Zeilen. Sie können dann die Gruppe, indem Sie diese Spalte, um die Zusammenfassung Sie möchten:Beispiel auf SQL Fiddle
OK, ich habe gerade auf es von
SUM
zuCOUNT(NULLIF(UserCode, 0))
, so dass, wennUserCode
ist0
, dieNULLIF
Funktion schalten Sie es inNULL
, und es nicht in dieCOUNT
Danke. Super Arbeit!!!!!
Dies ist eine geniale Lösung ??
InformationsquelleAutor GarethD
Bitte versuchen:
SQL Fiddle Demo
InformationsquelleAutor TechDo