SQL query vraagje

Status
Niet open voor verdere reacties.

karenz

Nieuwe gebruiker
Lid geworden
16 mei 2008
Berichten
3
Ik heb mezelf hier suf op gezocht:

Ik heb drie tabellen:

Klant
--------
Klantnr
Naam
Voornaam

Dossier
-----------
Dossiernr
Klantnr

Onderzoek
----------------
Onderzoeksnr
Dosiernr
Datum

Een klant heeft één of meerdere dossiers en een dossier heeft één of meerdere onderzoeken

Ik zou voor elke klant het recentste onderzoek moeten hebben met de datum van dat onderzoek en het dossiernr waar het onderzoek toe behoort.

Klantnr
Dossiernr waartoe het recentste onderzoek behoort
Onderzoeksnr van het recentste onderzoek
Datum van het recentste onderzoek
 
Ik zal het hier even proberen beredeneren, maar ben er vrij zeker van dat dit niet de meest efficiënte manier zal zijn. Ikzelf ben namelijk niet zo goed in joins, dus doe ik alles adhv subquerys, maar goed hier gaat ie.

Als eerste hebben we alle dossiers van een klant nodig. Ik ga er even vanuit dat we als invoer een klantnummer krijgen (1).
Code:
SELECT Dossiernr FROM Dossier WHERE Klantnr='1'

Vervolgens vragen we alle onderzoeksnummers van die dossiernummers op
Code:
SELECT Onderzoeksnr FROM Onderzoek
WHERE Dossiernr IN (SELECT d.Dossiernr FROM Dossier d WHERE Klantnr='1')

Nu vragen we daarbij ook nog de datums van die onderzoeken op, en sorteren het geheel aflopend op datum, door het resultaat te beperken tot 1 record hebben we hiermee de datum & onderzoeksnummer van het laatste onderzoek van dat klantnummer.
Code:
SELECT
    Onderzoeksnr,
    Datum
FROM
    Onderzoek
WHERE
    Dossiernr IN (
        SELECT
            d.Dossiernr
        FROM
            Dossier d
        WHERE
            Klantnr='1'
    )
ORDER BY
    Datum ASC
LIMIT 1

Tenslotte voegen we nog toe dat ook het Klantnr uit Klant moet opgehaald worden, evenals het Dossiernr van dat Onderzoek uit Dossier. Het geheel komt er dan als volgt uit te zien:
Code:
SELECT
    k.Klantnr
    d.Dossiernr
    o.Onderzoeksnr,
    o.Datum
FROM
    Onderzoek o,
    Klant k,
    Dossier d
WHERE
    o.Dossiernr IN (
        SELECT
            d2.Dossiernr
        FROM
            Dossier d2
        WHERE
            d2.Klantnr='1'
    )
AND
    d.Dossiernr = o.Dossiernr
AND
    k.Klantnr = d.Klantnr
ORDER BY
    Datum ASC
LIMIT 1
Ik denk dat het zo ongeveer zou moeten werken, maar heb het nog niet uitgetest...
 
Wat kun je hiermee?


Select K.Klantnr, O.Dossiernr, O.Onderzoeksnr, MIN(O.datum)
From Klant K, Dossier D, Onderzoek O
group By K.Klantnr
Having d.Dossiernr = o.Dossiernr
AND
k.Klantnr = d.Klantnr

Groet
Arjee
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan