Max waarde met datum en tijd
Ik heb een tabel waar ik een timestamp in heb en een temperatuur waarden.
Ik ben op zoek naar de maximale temperatuur en de daarbij horende datum en tijd. Wat mij lukt is het volgende:
Maximale waarde zoeken tussen twee datums:
SELECT max( temperatuur ) FROM `sensorwaardes` WHERE (changed_on BETWEEN '2015-03-02' AND '2015-03-03')
Maximale waarde zoeken met datum een tijd erbij
SELECT changed_on, temperatuur
FROM sensorwaardes
WHERE temperatuur=(SELECT MAX(temperatuur) FROM sensorwaardes)
Maar ik wil deze twee combineren. Ik wil als output de changed_on (datum en tijd) en maximale temperatuur tussen een bepaalde tijd.
Ik heb geprobeerd om ze te combineren alleen dan krijg ik ook waardes van 2015-03-01, maar dat geef ik toch niet op?
SELECT changed_on, temperatuur
FROM sensorwaardes
WHERE temperatuur= (SELECT MAX(temperatuur) FROM sensorwaardes WHERE (changed_on BETWEEN '2015-03-02' AND '2015-03-03'))
Wat doe ik fout, of hoe kan ik dit voor elkaar krijgen?
Je zou aflopend kunnen sorteren op temperatuur binnen dat interval, maar de vraag is/blijf dan dus of er niet meer (dezelfde) maxima zijn.
Of je zou iets met GROUP BY moeten doen, omdat je MAX gebruikt.
EDIT: het zou ook helpen als je tabel een auto-increment id heeft, dan zou je zoiets kunnen doen.
Gewijzigd op 02/03/2015 13:59:09 door Thomas van den Heuvel
Vergeten te vermelden, ik heb ook een auto-increment id.
Er zijn inderdaad meerdere maxima mogelijk. Ik heb degene nodig die als eerste voorkomt.
Code (php)
1
2
3
4
5
2
3
4
5
SELECT *
FROM sensorwaardes
WHERE changed_on BETWEEN '2015-03-02' AND '2015-03-03'
ORDER BY temperatuur DESC
LIMIT 1
FROM sensorwaardes
WHERE changed_on BETWEEN '2015-03-02' AND '2015-03-03'
ORDER BY temperatuur DESC
LIMIT 1
dubbele waarden worden helaas niet gevonden hiermee...
Gewijzigd op 02/03/2015 16:57:03 door Ivo P
Ik heb nog geprobeerd met GROUP BY maar dit lukte me niet.
Gewijzigd op 02/03/2015 19:12:22 door Sjaak Pieters
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT *
FROM sensorwaarden
WHERE temperatuur IN (
SELECT temperatuur
FROM sensorwaardes
WHERE changed_on BETWEEN '2015-03-02' AND '2015-03-03'
ORDER BY temperatuur DESC
LIMIT 1
)
AND changed_on BETWEEN '2015-03-02' AND '2015-03-03'
FROM sensorwaarden
WHERE temperatuur IN (
SELECT temperatuur
FROM sensorwaardes
WHERE changed_on BETWEEN '2015-03-02' AND '2015-03-03'
ORDER BY temperatuur DESC
LIMIT 1
)
AND changed_on BETWEEN '2015-03-02' AND '2015-03-03'
Toevoeging op 03/03/2015 02:25:02:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
s.temperatuur,
s.changed_on
FROM
sensorwaarden s
WHERE NOT EXISTS
(SELECT 1
FROM
sensorwaarden sw
WHERE
sw.temperatuur >= s.temperatuur
AND sw.id > s.id
AND sw.changed_on BETWEEN CAST('2015-03-02' AS DATE) AND CAST('2015-03-03' AS DATE)
)
AND s.changed_on BETWEEN CAST('2015-03-02' AS DATE) AND CAST('2015-03-03' AS DATE)
s.temperatuur,
s.changed_on
FROM
sensorwaarden s
WHERE NOT EXISTS
(SELECT 1
FROM
sensorwaarden sw
WHERE
sw.temperatuur >= s.temperatuur
AND sw.id > s.id
AND sw.changed_on BETWEEN CAST('2015-03-02' AS DATE) AND CAST('2015-03-03' AS DATE)
)
AND s.changed_on BETWEEN CAST('2015-03-02' AS DATE) AND CAST('2015-03-03' AS DATE)
Gewijzigd op 03/03/2015 11:16:52 door Ger van Steenderen