MySQL - Wie wählen Sie die Zeilen mit den min(timestamp) pro Stunde an einem bestimmten Datum
Ich habe eine Tabelle von Produktion Lesungen und brauchen, um ein ResultSet mit einer Zeile für die min(Zeitstempel) für JEDE Stunde.
Die Spalte layout ist ziemlich einfach:
ID,TIMESTAMP,SOURCE_ID,SOURCE_VALUE
Daten Beispiel würde wie folgt Aussehen:
123,'2013-03-01 06:05:24',PMPROD,12345678.99
124,'2013-03-01 06:15:17',PMPROD,88888888.99
125,'2013-03-01 06:25:24',PMPROD,33333333.33
126,'2013-03-01 06:38:14',PMPROD,44444444.44
127,'2013-03-01 07:12:04',PMPROD,55555555.55
128,'2013-03-01 10:38:14',PMPROD,44444444.44
129,'2013-03-01 10:56:14',PMPROD,22222222.22
130,'2013-03-01 15:28:02',PMPROD,66666666.66
Datensätze Hinzugefügt werden, um diese Tabelle im Laufe des Tages und der source_value ist bereits berechnet, so dass keine Summe benötigt wird.
Ich kann nicht herausfinden, wie man eine Zeile für die min(timestamp) für jede Stunde der current_date.
select *
from source_readings
use index(ID_And_Time)
where source_id = 'PMPROD'
and date(timestamp)=CURRENT_DATE
and timestamp =
( select min(timestamp)
from source_readings use index(ID_And_Time)
where source_id = 'PMPROD'
)
Den obigen code, natürlich, gibt mir einen Datensatz. Ich muss einen Datensatz für den min(h(timestamp)) der current_date.
Mein ResultSet enthalten sollte, die Zeilen-IDs: 123,127,128,130. Ich habe schon stundenlang mit ihm. Wer ist mein held? 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie unter:
DATE_FORMAT
nimmt die Argumente der anderen Weg (mysql-doc). Hier ist die Antwort in der fiddle.group by
Werte. Sie können die Fehler durch das vertauschen top 2 timestamp-Werte in den Geige. Habe eine ähnliche Frage und verweisen diese Antwort. Hoffe, es wird nützlich sein.Mit Fenster Funktion:
Ich habe es noch nicht getestet, aber die Grundidee ist:
1)
ROW_NUMBER() OVER(PARTITION BY HOUR(timestamp) ORDER BY timestamp)
Diese gibt jeder Zeile eine Zahl, beginnend mit 1 für jede Stunde, die Erhöhung von timestamp. Das Ergebnis könnte so Aussehen:
2), Dann auf die Haupt-Abfrage, die wir auswählen, werden nur die Zeilen mit
rn=1
, in anderen Worten, Zeilen, hat die niedrigste timestamp in jeder stündlich partition (1. Reihe nach sortiert nach dem Zeitstempel in jeder Stunde).