Wählen Sie Zeilen, die weniger als 5 Minuten alt mit DATE_SUB

Ich habe eine Tabelle, die immer Hunderte von Anfragen pro minute. Das Problem, das ich habe ist, dass ich brauche einen Weg, um wählen Sie nur die Zeilen, die eingefügt wurden in den letzten 5 Minuten. Ich versuche dieses:

SELECT count(id) as count, field1, field2
FROM table
WHERE timestamp > DATE_SUB(NOW(), INTERVAL 5 MINUTE)
ORDER BY timestamp DESC

Mein Problem ist, dass es gibt 70k+ Ergebnisse und das zählen. Ich bin mir nicht sicher, was ich falsch mache, aber ich würde lieben zu bekommen einige Hilfe auf diesem. Darüber hinaus, wenn es eine Möglichkeit zum gruppieren von minute zu haben, es so Aussehen:

| count | field1 | field2 | 
----------------------------

Ich würde gerne die Hilfe und Führung auf diese, so lassen Sie bitte mich wissen Sie Ihre Gedanken.

  • Was ist der Typ von timestamp Spalte?
  • es ist ein datetime -, würde das einen Unterschied machen?
  • Es macht großen Unterschied, wie einige Leute benutzen INT für die Speicherung von Zeitstempeln. Auch unterscheidet es sich von TIMESTAMP geben, weil DATETIME behandelt wird wörtlich und nicht die Einstellung für die Zeitzone. Kann dies das problem sein - vergleichen Sie die Zeitstempel der zuletzt eingefügten Eintrag mit dem Ergebnis des SELECT NOW(); und lassen Sie uns wissen, über die Werte der beiden.
  • Denken Sie daran, zu tun, die Abfrage auf genau die gleiche Datenbank abgefragt, die in Ihrer Frage. Es hat einige der Zeitzone-Einstellungen, die Einfluss auf die Ergebnisse.
  • das ist sicherlich einen großen Unterschied gemacht. Ich bin mir fast sicher, dass das funktioniert jetzt. Der einzige Grund, warum ich mich zu hinterfragen ist, weil meine original-datetimes waren eine Stunde oder so vor der Maschine ist an der Zeit, so hat es nicht übertroffen, das alte datetimes noch. Ich werde Sie wissen lassen, kurz
  • Dies ist generell eine gute Idee, verwenden Sie das gleiche Schema, zB. 1) speichern der Unix-Epoche Integer in der Datenbank, oder 2) die Umwandlung von Unix-Epoche zahlen der TIMESTAMP Spalten und wieder auf die Datenbank-Schicht oder 3) konvertieren von Unix-Epoche-zahlen in DATETIME strings und zurück auf dem application layer. Ansonsten gibt es einen Platz für die Zeitzone überein.

InformationsquelleAutor Tom Sampson | 2012-02-02
Schreibe einen Kommentar