GROUP BY
cursusnummer: 1 (2009)
cursusnummer: 1 (2008)
cursusnummer: 3 (2008)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql = "SELECT id, certificaatnummer, cursusnummer, examendatum, examentijd, uitslag, vervaldatum
FROM certificaten
WHERE cursistnummer = '".ID."'
AND debiteurnummer = '".UID."'
GROUP BY cursusnummer
ORDER BY vervaldatum DESC";
?>
$sql = "SELECT id, certificaatnummer, cursusnummer, examendatum, examentijd, uitslag, vervaldatum
FROM certificaten
WHERE cursistnummer = '".ID."'
AND debiteurnummer = '".UID."'
GROUP BY cursusnummer
ORDER BY vervaldatum DESC";
?>
maar met een groupby krijg ik:
cursusnummer: 1 (2008)
cursusnummer: 3 (2008)
Ik wil nu eigenlijk de cursus met die nieuwste 'vervaldatum' behouden.. niet de oudste, hoe los ik dit op in bovenstaande query?
Thanks
Gewijzigd op 13/01/2011 21:01:54 door Jaron T
Waar heb je überhaupt de group by voor nodig?
Karl Karl op 13/01/2011 21:02:45:
Waar heb je überhaupt de group by voor nodig?
Of kan ik dit ook oplossen met een 'unique' of 'distinct'
Je certificaten / cursussen horen in aparte tabellen te staan.
Karl Karl op 13/01/2011 21:07:27:
Volgens mij heb je een verkeerd database-model.
Je certificaten / cursussen horen in aparte tabellen te staan.
Je certificaten / cursussen horen in aparte tabellen te staan.
Het database model is prima... cursussen en certificaten staan gescheiden van elkaar, cursussen refereert naar een cursusid. Maar dit is geen antwoord op mijn vraag.
Wat wil je dan nu precies hebben? Zoals ik het nu zie komen er twee dingen uit de database terwijl je er zeven opvraagt.
indien er een cursusnummer vaker dan 1x voorkomt.. wil ik alleen het certificaat zien met de nieuwste verloopdatum..
Gewijzigd op 13/01/2011 21:20:52 door Jaron T
"SELECT certificaatnummer, cursusnummer, examendatum, examentijd, uitslag, max(vervaldatum)
FROM certificaten
WHERE cursistnummer = '".ID."'
AND debiteurnummer = '".UID."'
GROUP BY certificaatnummer, cursusnummer, examendatum, examentijd, uitslag
ORDER BY max(vervaldatum) DESC";
De velden waar je niet op groepeert moeten in een aggregate functie gebruikt worden (sum, avg, max, min, ...).
Als je niet direct kunt sorteren op max(vervaldatum) kun je een constructie gebruiken als;
select * from (select .. from .. group by ) order by ..
Dan sorteer je achteraf de resultaten van een subquery.
Succe.