ich eine Tabelle in einer SQL Server-Datenbank ein Benutzer lädt ein Bild aus meiner app ein Register jeder Zeit enthält, so TBL_Downloads
meine Tabelle hat die folgende Struktur:Count Register für Tag einschließlich Null
UserID| ImageID | DownloadDate |
------+-----------+---------------------------+
292 | 782 | 02-01-2016 14:20:22.737 |
292 | 783 | 02-01-2016 14:20:22.737 |
292 | 784 | 02-02-2016 14:20:22.737 |
292 | 785 | 02-04-2016 14:20:22.737 |
292 | 786 | 02-05-2016 14:20:22.737 |
292 | 787 | 02-06-2016 14:20:22.737 |
In Tabelle Es werden nur Register für einen bestimmten Benutzer angezeigt, auch wenn es mehrere gibt, um das Beispiel zu vereinfachen.
Was ich möchte, ist eine Ergebnistabelle, die die Anzahl der Downloads für einen bestimmten Benutzer von BY DAY in den letzten 30 Tagen enthält, einschließlich einer Null für die Tage, an denen kein Download stattfand. Im Moment habe ich die folgende Abfrage:
SELECT COUNT(*) AS Downloads
FROM TBL_Downloads
WHERE DownloadDate BETWEEN DATEADD(day, -30, GETDATE()) AND GETDATE()
AND IdUser = 292
GROUP BY CAST(DownloadDate AS DATE)
Diese eine Tabelle mit der Summe zurückgibt, sondern nur für Tage, für die es mindestens einen Eintrag eines Downloads ist.
Haben Sie eine Idee, wie kann ich das lösen?
Die Lösung groß aufzufüllen verwendet, ist aber Es berücksichtigt nicht, dass die Tabelle "TBL_Downloads" über Register von verschiedenen Benutzern verfügt. Sobald ich die "WHERE userid = 292" hinzufüge, verschwinden die Zeilen in cero wieder. Oder vielleicht mache ich etwas falsch –
@AlejandroFlores put 'und userid = 292' in der' linken Join' Bedingung anstelle von einer 'wo' - aktualisiert meine Antwort und die Rextester Demo um zu zeigen, was ich meine. – SqlZim
Ich habe den gleichen Satz vorher verwendet. Ich weiß nicht, warum ich nicht darauf gekommen bin. Es hat perfekt funktioniert. Ich bin ein bisschen neu darin, also vielen Dank. –