Ich versuche eine T-SQL-Abfrage zu schreiben, die über einen bestimmten Zeitraum hinweg nach der Anzahl der Einträge in einer Tabelle sucht und sie dann nach Minuten gruppiert (Einträge/Minute). Aber ich kann es nicht bekommen, um die Minuten mit 0 Einträgen zu zeigen.Gruppieren nach datetime Minuten - Minuten mit 0 Einträgen in der Datenbank anzeigen?
Meine Anfrage wie folgt aussieht:
select
[Minute],
Files
from
(
select
(DATEDIFF(MINUTE, '2017-02-02 17:00:00.000', RegTime)/1) as [Minute] ,
count(*) as Files
from TransferLog
WHERE RegTime BETWEEN '2017-02-02 17:00:00.000' AND '2017-02-03 04:00:00.000'
group BY
(DATEDIFF(MINUTE, '2017-02-02 17:00:00.000', RegTime)/1)
) x order by [Minute]
Irgendwelche Ideen?
Edit1. Mit Ausnahme der Ausgabe werden Minuten ohne Einträge in der Tabelle angezeigt. Außerdem ist die Abfrage in diesem Fall ziemlich unbrauchbar, da ich nicht wissen kann, in welcher Minute keine Daten vorhanden waren. Wenn ich zum Beispiel Daten von 800 Minuten haben möchte, aber 20 der Minuten keine Daten in die Tabelle geschrieben haben, würde dies nur 780 Minuten an Daten anzeigen. Gibt es trotzdem eine Möglichkeit, die Daten zu sortieren oder die Abfrage zu modifizieren?
Expected output:
Minute | Files
0 685
1 0
2 672
3 0
4 415
5 434
6 746
-
Current Output:
Minute | Files
0 685
1 672
2 415
3 434
4 746
Jede Zeile in Ihr Ergebnis erzeugt wird, von einer oder mehreren Reihen aus Ihrer Eingabe-Tabellen. Sie erhalten keine Zeilen mit Nullen, weil ... es keine Zeile gibt, die diesen Datetime-Wert liefert. –
Möglicherweise müssen Sie einer Kalender-Tabelle beitreten, um die Minuten einzulesen, deren Diffs nicht in Ihrem Datensatz erscheinen. –
posten Sie bitte Ihr Tabellenschema und die erwartete Ausgabe. – McNets