ich SQLServer bin mit 2012, und ich habe eine Tabelle timestamped wie folgt aus:Aufzeichnungen finden in einem Zeitraum von 24 Stunden (nicht vor allem die letzten 24 Stunden) erstellt
Id INT NOT NULL, --PK
IdUser INT NOT NULL --FK from table USER
-- Some other fields
CreationDate DATETIME NOT NULL
Diese Tabelle irgendeine Art von Aktion durch die gemacht aufzeichnet Benutzer.
Ich versuche zu finden IF ein Benutzer hat diese Art von Aktion mehr als 20 Mal (dh es gibt 20 Datensätze mit der gleichen IdUser in dieser Tabelle) in einem Zeitraum von 24 Stunden.
Das Problem ist, ich bin nicht die Datensätze in den letzten 24 Stunden abzurufen versucht, aber die Datensätze in einem Zeitraum von 24 Stunden (ab dem ersten Rekord bis heute)
Das ist, was ich schrieb :
SELECT IdUser
FROM MyTable
WHERE IdUser = 1
AND CreationDate BETWEEN DATEADD(day, -1, GETDATE()) AND GETDATE() -- <= WRONG
Aber die WHERE
Klausel meiner Bedürfnisse nicht paßt, da ich keine Ahnung, wie zu übersetzen "20 Datensätze aus der Benutzer-ID = 1 in einem Zeitraum von 24 Stunden zu suchen, nicht vor allem der letzten 24 Stunden "in SQL
BEISPIEL
Angenommen, unsere Benutzer-ID = 1 hat 154 Mal diese Aktion ausgeführt. Also habe ich 154 Datensätze in meiner Tabelle mit der Datetime des Datensatzes.
IdUser = 1 ; CreationDate = 2016-07-29 12:24:54.590
IdUser = 1 ; CreationDate = 2016-07-29 16:51:55.856
IdUser = 1 ; CreationDate = 2016-07-27 14:12:36.125
(151 omitted rows)
Was ich suche ist, wenn ich 20 Datensätze in einem Zeitraum von 24 Stunden für einen bestimmten Benutzer finden kann. In diesem Beispiel sind nur die ersten 2 Stunden in einem Zeitraum von 24 Stunden. In meinem Fall suche ich, ob es 20 oder mehr Datensätze in diesem Zeitraum gibt.
Könnte mir jemand helfen?
Danke
Wenn Sie wissen, wie DATEADD verwenden (), warum benutzt du es nicht, um 24 Stunden anstatt 1 Tag zu bekommen? –
Verwenden Sie einfach GROUP BY IdUser HAVING COUNT (CreationDate)> 20, um Benutzer mit mindestens 20 Aktionen zu erhalten.In Bezug auf das Datum können Sie die gleiche dateadd Funktion verwenden, indem Sie das Start- oder Enddatum/die Zeit als Parameter übergeben. –
@RamGrandhi Ich weiß nicht, ob dies das gewünschte Ergebnis ergibt, weil seine "Gruppe" _alle_ 24 Stunden sein könnte. –