Max waarde met datum en tijd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sjaak Pieters

Sjaak Pieters

02/03/2015 13:29:45
Quote Anchor link
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?
 
PHP hulp

PHP hulp

16/11/2024 14:46:27
 
Thomas van den Heuvel

Thomas van den Heuvel

02/03/2015 13:55:43
Quote Anchor link
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.
Gewijzigd op 02/03/2015 13:59:09 door Thomas van den Heuvel
 
Sjaak Pieters

Sjaak Pieters

02/03/2015 14:08:08
Quote Anchor link
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.
 
Ivo P

Ivo P

02/03/2015 16:56:33
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
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...
Gewijzigd op 02/03/2015 16:57:03 door Ivo P
 
Sjaak Pieters

Sjaak Pieters

02/03/2015 19:11:41
Quote Anchor link
Thanks Ivo! Dit is precies wat ik nodig heb.
Ik heb nog geprobeerd met GROUP BY maar dit lukte me niet.
Gewijzigd op 02/03/2015 19:12:22 door Sjaak Pieters
 
Ivo P

Ivo P

03/03/2015 02:24:33
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'


Toevoeging op 03/03/2015 02:25:02:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/03/2015 11:11:13
Quote Anchor link
@Ivo: Dat gaat met aan de zekerheid grenzende waarschijnlijkheid een foutmelding opleveren, je kan geen LIMIT gebruiken in WHERE (NOT) IN/EXISTS subquery's.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)
Gewijzigd op 03/03/2015 11:16:52 door Ger van Steenderen
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.