Hoi,

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 buitenste query heeft geen datum-restricties, en "temperatuur" lijkt mij niet op elk moment uniek. Daarbaast zou je best twee temperatuur-pieken in een interval kunnen hebben die hetzelfde zijn?

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.
Oke bedankt, weet zo nog niet hoe ik de query op moet bouwen, maar zal eens gaan zoeken met GROUP BY (heb er nog weinig ervaring in)

Vergeten te vermelden, ik heb ook een auto-increment id.
Er zijn inderdaad meerdere maxima mogelijk. Ik heb degene nodig die als eerste voorkomt.



SELECT *
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...
Thanks Ivo! Dit is precies wat ik nodig heb.
Ik heb nog geprobeerd met GROUP BY maar dit lukte me niet.


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'


[size=xsmall]Toevoeging op 03/03/2015 02:25:02:[/size]


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'
@Ivo: Dat gaat met aan de zekerheid grenzende waarschijnlijkheid een foutmelding opleveren, je kan geen LIMIT gebruiken in WHERE (NOT) IN/EXISTS subquery's.

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)

Reageren