Ich habe ein zu kompliziertes SQL-Problem (MySQL) für mich, und ich brauche Hilfe.MySQL Abfrage mit mindestens Zeilen als Spalten und Mittelwertbildung
Ich habe eine Tabelle mit Temperaturmesswerten. Diese Messwerte stammen von einer Anzahl von Sensoren, die an verschiedenen Orten platziert sind. Jede Lesung erfolgte zu einem Zeitstempel. Die Messungen werden alle zehn Minuten durchgeführt, und da die Messung sequentiell zwischen den Sensoren erfolgte, könnte zwischen den einzelnen Sensormessungen eine Sekunde liegen.
Zwei Sensoren lesen die Außentemperatur, was bedeutet, dass alle zehn Minuten zwei Messwerte (bei Position = 5 und Position = 6) die Außentemperatur reflektieren. Diese Sensoren sind auf der Nordseite und der Südseite des Gebäudes angebracht, was bedeutet, dass die niedrigste der zwei Messungen wahrscheinlich die genaueste ist, da die mit der höchsten derzeit durch Sonnenlicht ausgesetzt werden kann.
So eine Probe der Tabelle sieht wie diese
SELECT * FROM Temperatures
WHERE timestamp > "2016-07-01 15:00"
AND timestamp < "2016-07-01 15:40"
AND (Location=5 OR Location=6)
AND Site=3
ORDER BY timestamp ASC
(`ReadingID`, `Timestamp`, `Site`, `Location`, `Temperature`)
(3921775, '2016-07-01 15:00:01', 3, 5, 18),
(3921776, '2016-07-01 15:00:02', 3, 6, 17.5),
(3921781, '2016-07-01 15:10:01', 3, 5, 18.6),
(3921782, '2016-07-01 15:10:03', 3, 6, 17.9),
(3921787, '2016-07-01 15:20:01', 3, 5, 18.4),
(3921788, '2016-07-01 15:20:01', 3, 6, 22.7),
(3921793, '2016-07-01 15:30:01', 3, 5, 19.4),
(3921794, '2016-07-01 15:30:02', 3, 6, 29.2);
Wie Sie die Zeitmarke mit einem zweiten zwischen location = 5 und location = 6, selbst wenn sie eine starke zeitliche Korrelation haben könnte unterscheiden sie sehen können. Um 15:00 und 15:10 hat Ort 6 die niedrigste Temperatur und 15:20 und 15:30 Ort 5 hat die niedrigste Temperatur. Die Lese-ID spielt hier keine Rolle.
Was ich will ist das Folgende: 1) Zeigen Sie das Minimum von Standort 5 und Standort 6 für jedes 10-Minuten-Intervall an. Wie würde diese Abfrage zum Beispiel für einen einzigen Tag aussehen? (Lassen Sie uns "2016.07.01 00:00" auf "2016.07.01 23.50" betrachten.
Ie. Die folgende
(`Timestamp (as 10 minute interval)`, `Location`, `Min of location 5 and 6`)
'2016-07-01 00:00', <some data>
...
'2016-07-01 15:00', 6, 17.5
'2016-07-01 15:10', 6, 17.9
'2016-07-01 15:20', 5, 18.4
'2016-07-01 15:30', 5, 19.4
...
'2016-07-02 23:50', <some data>
2) Was wäre die durchschnittliche Außentemperatur für einen einzigen Tag in einem Intervall von einem Monat. Das ist die Durchschnittstemperatur von "2016-07-01 00:00" bis "2016-07-01 23:50", basierend auf der Minimaltemperatur von Ort 5 und Ort 6 für jeweils 10 Minuten. Wie würden Sie diese Abfrage schreiben?
In diesem letzteren Fall nehmen wir entweder an, dass alle Daten vorhanden sind, dh. dass es wirklich 144 Lesungen pro Tag gibt (das ist meistens der Fall) oder nehmen wir an, dass, wenn eine Lesung übersehen wird, sie den Durchschnitt nicht wirklich beeinflusst.
Eg. das folgende Ergebnis wird gesucht:
(`Date`, `Average based on min of location 5 and 6 for each 10 minute intervl`)
'2017-07-01', 12.0
'2017-07-02', 13.1
'2017-07-03', 12.9
etc.
'2017-07-31', 17.7
Mit freundlichen Grüßen Pål
Vielen Dank. Ich bin etwas verwirrt, da Sie nicht dieselben Tabellen- und Spaltennamen verwenden wie ich. Die Tabelle heißt "Temperaturen" (und nicht Sensoren) und die Zeitstempelspalte heißt "Zeitstempel" (und nicht Tstamp, was eine unglückliche Wahl sein könnte). Wenn ich versuche, meine Namen zu tauschen, funktioniert es nicht. Und ich kann nicht sehen, was ich falsch mache. Würde es Ihnen etwas ausmachen, Ihre Abfrage so zu ändern, dass sie mit meinen Namen funktioniert? –
Ok, ich habe einen neuen Rextester eingestellt, ich habe den Tabellennamen in Temperature und Tstamp Feld zu TimeStamp1 geändert (ich möchte nicht reservierte Wörter für Feldnamen verwenden). Versuchen Sie es hier: http://rexttester.com/BXJW4041 – McNets
Und das ist wahrscheinlich klug, reservierte Namen nicht zu verwenden. Ich mag es auch nicht und weiß wirklich nicht, warum es so gelandet ist, weniger, dass es funktioniert ... Diese Abfrage scheint aber auch für den Server zu schwer zu sein, es gibt keine Antwort in 10 Sekunden. –