Values laatste record GROUP BY

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander D

Sander D

15/04/2013 15:53:18
Quote Anchor link
Ik heb nu een SQL statement die het iets te goed doet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT MAX( id ) AS id, did,
`status` FROM mutaties
WHERE STATUS LIKE  'doorbroken%'
GROUP BY did
ORDER BY MAX(id) DESC


Als je de volgende records hebt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
id = 1
status = 'ok'
did = 100

id = 2
status = 'doorbroken'
did = 100

id = 3
status = 'ok'
did = 100


Dan zou hij niets moeten terug geven want MAX(id) is 3, en bij 3 is de status 'ok' en niet 'doorbroken'. Toch laat hij vervolgens als resultaat zien:

id = 3, status = 'doorbroken', did = 100.

Hoe krijg ik nu enkel de records terug waarbij de status 'doorbroken' is van het hoogste id?
 
PHP hulp

PHP hulp

01/08/2021 16:51:42
 
- SanThe -

- SanThe -

15/04/2013 16:08:02
Quote Anchor link
Beetje vreemd dit: ORDER BY MAX(id) DESC
Daar staat dus eigenlijk ORDER BY 3 DESC
 
Erwin H

Erwin H

15/04/2013 16:22:49
Quote Anchor link
Volgens mij krijg je dan als resultaat:
id = 2, (DUS NIET 3!)
status = 'doorbroken',
did = 100

En dit klopt. Wat de query namelijk eerst doet is het WHERE statement uitvoeren. Op basis van de dan geselecteerde records wordt je aggregate functie (max) uitgevoerd. Daarvan is de uitkomst 2.

Dit is denk ik dus niet wat je wilt, maar wat je wel wilt is me niet helemaal duidelijk.

- SanThe - op 15/04/2013 16:08:02:
Beetje vreemd dit: ORDER BY MAX(id) DESC
Daar staat dus eigenlijk ORDER BY 3 DESC

Nee, dat staat er niet. MAX(id) in dit geval is de naam van de kolom. Omdat de TS er ook een alias aan geeft kan hij echter ook gewoon 'ORDER BY id DESC' gebruiken.
 
Reshad F

Reshad F

15/04/2013 16:41:13
Quote Anchor link
SELECT max(id) AS id, did, status
FROM mutates
WHERE status = 'doorbroken'
GROUP BY did
ORDER BY MAX(id) DESC;

en ik snap je vraag niet helemaal (betreft het een koppeltabel )? laat is zien hoe je tabbelen er uit zien
 
Erwin H

Erwin H

15/04/2013 16:46:00
Quote Anchor link
Volgens mij zou je het zo moeten doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
SELECT a.id, a.did, a.status
FROM mutaties a
INNER JOIN (
  SELECT did, max(id) AS id
  FROM mutaties
  GROUP BY did
) b ON (
  a.did = b.did
  AND a.id = b.id
)
WHERE a.status LIKE 'doorbroken%'
ORDER BY a.id DESC;
Gewijzigd op 15/04/2013 16:49:29 door Erwin H
 
Sander D

Sander D

16/04/2013 13:43:45
Quote Anchor link
Bedankt allemaal voor jullie antwoorden. Die van Erwin slaat de spijker op de kop! Dank je wel.
 



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.