Sorteren op laatste datum
Ik heb het volgende probleem. Er zitten in de database een hoop documenten. Sommige documenten met dezelfde documentcode en een andere revisie(versie). Ik wil dus eigenlijk dat als er documenten zijn met dezelfde documentcode alleen het document word getoont met de laatste ontwerp_datum en de rest waar geen dubbele van is ook echoën.
Alleen heb ik rondgekeken en zelf geprobeerd maar ik kom er maar niet achter hoe ik dit kan oplossen. Ik ben ook even aan de gang geweest met een sub query maar ik kom er niet uit. Begrijp ook niet precies hoe te realiseren.
Voor degene die me een richting in kunnen sturen of uit kunnen leggen alvast bedankt!
mvg,
Nils van Woensel
Dit is wat ik tot nu toe heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$query2=
"
SELECT
MAX(datum_ontworpen),
bedrijf,documentcode,omschrijving,revisie,datum_ontworpen,datum_ontvangen,status,documentsoort,situatie,aantekeningen
FROM
documenten
WHERE
projectnummer LIKE '%" .$_POST["docproject"] . "%'
AND
bedrijf LIKE '%". $_POST["bedrijf"]. "%'
GROUP BY
documentcode,bedrijf,omschrijving,revisie,datum_ontworpen,datum_ontvangen,status,documentsoort,situatie,aantekeningen
ORDER BY
bedrijf ASC
" ;
?>
$query2=
"
SELECT
MAX(datum_ontworpen),
bedrijf,documentcode,omschrijving,revisie,datum_ontworpen,datum_ontvangen,status,documentsoort,situatie,aantekeningen
FROM
documenten
WHERE
projectnummer LIKE '%" .$_POST["docproject"] . "%'
AND
bedrijf LIKE '%". $_POST["bedrijf"]. "%'
GROUP BY
documentcode,bedrijf,omschrijving,revisie,datum_ontworpen,datum_ontvangen,status,documentsoort,situatie,aantekeningen
ORDER BY
bedrijf ASC
" ;
?>
Wanneer ik bij de GROUP BY alleen documentcode neerzet filterd hij netjes de dubbele documentcodes eruit maar helaas pakt hij volgens mij de eerste die hij in de database tegenkomt en niet de laatste datum_ontworpen.
Gewijzigd op 01/01/1970 01:00:00 door Nils
Quote:
Dat is functionaliteit van MySQL en heeft helemaal niets met SQL te maken. Sterker nog, het kán niet eens in SQL, de query slaat dus nergens op.Wanneer ik bij de GROUP BY alleen documentcode neerzet filterd hij netjes de dubbele documentcodes eruit maar helaas pakt hij volgens mij de eerste die hij in de database tegenkomt
Wanneer je GROUP BY gebruikt, maak je een groep records aan en ga je van deze groep in zijn geheel bepaalde eigenschappen opvragen. De records in deze groep hebben echter niet dezelfde datum. Deze datum kun je dus niet opvragen, het is geen eigenschap van de hele groep. Kan niet, bestaat niet, onzin. Punt.
Een goede database, bv. PostgreSQL, had dan ook een error gegeven op deze query.
Oplossing voor jouw probleem: Pak met een subquery eerst de records waarin moet worden gezocht, de meest recente versie. ORDER BY datum DESC LIMIT 1
@frank wat schuift dat nou die postgresql reclame de hele dag?
hmm ja dit heb ik ook gepbrobeerd maar ik ben miss daar niet helemaal in thuis omdat ik me niet voorgesteld krijg hoe ik deze functie zo kan bouwen dat het werkt. Ik weet dus neit zo wat ik met wat moet vergelijken enz.