Frage

Ich habe eine Tabelle, die Daten jede Minute aufgezeichnet enthält, so habe ich eine Zeile für jede Minute. Wenn die Daten für die Verarbeitung zurückkehrt, wird diese Genauigkeit für die letzten 6 Stunden erforderlich, aber danach wird ein geringeres Maß an Genauigkeit ist ausreichend, z.B. alle 5 Minuten.

kann ich alle Daten in ein Array zurückgeben und dann alle, aber jedes fünftes Element entfernen, aber das erfordert, dass alle Daten zurückgegeben von MySQL und dann in das Array zuerst lesen -. Eine ganze Menge von Daten

Wie kann ich jede n-te Zeile in MySQL zurückkehren? Ich habe diese Blog-Post, die unter Verwendung schlägt primaryKey% 5 = 0, wobei primaryKey auto_increment ist aber

a) keine Indizes verwenden b) nur primaryKey Werte zurück, die von 5 und im Fall von Deletionen teilbar sind, möglicherweise nicht tatsächlich jede fünfte Zeile

Kann man das nur in der SQL-Abfrage durchgeführt werden oder wird es Zeile für Zeile durch die Ergebnismenge mit Cursor erfordern Looping?

Ich bin mit MySQLi in PHP an die DB zu verbinden.

War es hilfreich?

Lösung

Die Liste der Zeitstempel alle 5 Minuten:

SELECT
  MIN(logtimestamp) AS first_of_five_minutes
FROM tLog
GROUP BY
  DATE(logtimestamp),
  HOUR(logtimestamp),
  MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5)

Jetzt können Sie diese als Sub-select verwenden, um die angeforderten Protokolleinträge zu erhalten, indem logtimestamps Beitritt auf dem first_of_five_minutes. Natürlich haben zusätzliche WHERE-Klauseln innerhalb und außerhalb repliziert werden, so dass Sie den „richtigen“ Zeitstempel erhalten.

Beachten Sie auch, dass dies den ersten Zeitstempel in jedem Fünf-Minuten-Intervall gibt, wheras Lösungen direkt nur mit minutes%5 = 0 logentries zurück, die auf ein Vielfach von tatsächlich ist. 05, die fehlschlagen, wenn Sie Verzögerungen bei der Aufnahme Protokollen oder ähnliches haben

Andere Tipps

völlig ungetestet aber dies könnte funktionieren

SELECT Row, col_a 
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1 
WHERE Row%5 = 0; 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top