Avatar billede d9ha2 Nybegynder
30. september 2010 - 12:02 Der er 5 kommentarer og
1 løsning

Seneste dato i relateret tabel

Hej Eksperter,

Er ved at gøre en forespøgsel i en DB med historik.
Har 4 relaterede tabeller i forespørgslen
t_Udstyr
t_Godkend
t_Status
t_Lokation

De 3 sidste er en til mange relationer til t_udstyr
For hvert stykke udstyr vil der være flere godkendelser, da udstyret godkendes halv- eller helårligt.

Jeg har brug for at hente datoen for den seneste godkendelse i min forespørgsel.

Jeg har brugt Query designeren til at lave forespørgslen og så forsøgt at putte en Max funktion på t_Godkend.GodkDato. Det virker bare ikke, og jeg kan ikke lige gennemskue hvad der går galt. SQL herunder:

SELECT t_Udstyr.Identitet, t_Udstyr.Navn, t_Status.Status, t_Lokation.LokNavn, t_Lokation.LokID, DateAdd("d",t_Godkend!GodkLobeTid,t_Godkend!GodkDato) AS Udlob, t_Godkend.Godkender, t_Udstyr.Ejer, t_Godkend.GodkDato

FROM t_Status INNER JOIN
                        (t_Lokation INNER JOIN
                                          (t_Godkend INNER JOIN t_Udstyr ON t_Godkend.GodkendID = t_Udstyr.Godk )
                        ON t_Lokation.LokID = t_Udstyr.Lokation)
ON t_Status.StatusID = t_Udstyr.StatusNr

WHERE t_Godkend.GodkDato = (Select MAX(G1.GodkDato) FROM t_Godkend as G1 WHERE t_Udstyr.Godk=G1.GodkendID)

ORDER By DateAdd("d",t_Godkend!GodkLobeTid,t_Godkend!GodkDato);

mvh
Henrik
Avatar billede anlu Nybegynder
30. september 2010 - 14:02 #1
Nu ved jeg jo ikke hvad dine felter hedder, men er det de rigtige felter du sammenligner i din subquery?

Personligt synes jeg den mest overskuelige måde at løse denne type problemstilling på er at lave en query der finder max-godkendelsesdato pr. udstyrsid (og udelukkende læser fra t_godkend).

Denne query vil jeg så bruge som input til min hovedquery og simpelthen lave en join på udstyrsid.
Avatar billede d9ha2 Nybegynder
30. september 2010 - 14:17 #2
t_Udstyr.Godk er fremmednøgle til t_Godkend.GodkendID (primary key)

UdstyrID forekommer ikke i t_Godkend, så jeg er ikke helt med på hvad du mener
Avatar billede anlu Nybegynder
30. september 2010 - 14:32 #3
Hmm... det lyder lidt bagvendt for mig. Er det ikke sådan at der er flere godkendelser pr. udstyr?
Jeg antog der ville være en record pr. udstyr i t_Udstyr og så flere records pr. udstyr i t_Godkend (en for hver godkendelse). Kan du uddybe hvordan records skal tolkes, når t_Udstyr peger på t_Godkend?
Avatar billede d9ha2 Nybegynder
30. september 2010 - 14:38 #4
Sorry, du har ret jeg fik vendt det forkert. Det er som du beskriver at der er flere records i t_godkend per record i t_Udstyr. Jeg prøver lige din idé.
Avatar billede d9ha2 Nybegynder
30. september 2010 - 14:57 #5
Tak til anlu. Ser ud til at virke - det er så nemt når mean ved hvordan ;-)

lægger du svar så du kan få nogle point

---------

SELECT t_Udstyr.Identitet, t_Udstyr.Navn, t_Status.Status, t_Lokation.LokNavn, t_Lokation.LokID, DateAdd("d",t_Godkend!GodkLobeTid,SenesteDato) AS Udlob, t_Godkend.Godkender, t_Udstyr.Ejer,  (Select Max(G1.GodkDato)
from t_Godkend AS G1
Where G1.Udstyr=t_Udstyr.Identitet) AS SenesteDato

FROM t_Status INNER JOIN
                        (t_Lokation INNER JOIN
                                          (t_Godkend INNER JOIN t_Udstyr ON t_Godkend.GodkendID = t_Udstyr.Godk )
                        ON t_Lokation.LokID = t_Udstyr.Lokation)
ON t_Status.StatusID = t_Udstyr.StatusNr


ORDER By DateAdd("d",t_Godkend!GodkLobeTid,t_Godkend!GodkDato);
Avatar billede anlu Nybegynder
30. september 2010 - 15:01 #6
glad for at kunne hjælpe :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester