Avatar billede dejbjerg Nybegynder
18. marts 2010 - 11:16 Der er 11 kommentarer og
1 løsning

Find nyeste post i relateret tabel

Hey

Jeg har 2 tabeller. Én der hedder Opgaver og én er hedder Status.

Jeg vil gerne kunne følge historikken i opdatering af status på den enkelte opgave.

Hvordan laver jeg en forespørgsel som for hver opgave kun viser det nyeste status?

Opgaver indeholder:
opgave_id,
opgave_navn,
(...)

Status indeholder:
status_id,
status_opgave_id (som refererer til Opgaver.opgave_id)
status_opdateret (dato og klokkeslet)
status_tekst


På forhånd tak
/dej
Avatar billede mugs Novice
18. marts 2010 - 11:26 #1
SELECT status_opdateret (Status.status_opdateret ) AS MaksOfDato
FROM status
Avatar billede dejbjerg Nybegynder
18. marts 2010 - 11:38 #2
Tak for svar

Jeg synes der mangler status_opgave_id et eller andet sted - i hvertfald kan jeg ikke se, hvordan jeg for hver opgave får vist den nyeste status.

Skal jeg putte din SELECT ind et bestemt sted?

/dej
Avatar billede dejbjerg Nybegynder
18. marts 2010 - 12:13 #3
Jeg vil gerne lave en forespørgsel/rapport, hvor jeg for hver opgave får vist alle felter i opgaveposten + den nyeste opdateringstekst vedrørende samme opgave.
Avatar billede mugs Novice
18. marts 2010 - 12:18 #4
Du laver blot en forespørgsel og viser totaler og MAKS for feltet status_opdateret
Avatar billede dejbjerg Nybegynder
18. marts 2010 - 13:13 #5
Når jeg laver en forespørgsel på alle felter i begge tabeller og under status_opdateret sætter Total til Maks, så vises alle posterne i Status tabellen.

SQL:
SELECT Opgaver.opgave_id, Opgaver.opgave_navn, (...), Status.status_id, Status.status_opgave_id, Max(Status.status_opdateret) AS MaksOfstatus_opdateret, Status.status_tekst
FROM Opgaver INNER JOIN Status ON Opgaver.opgave_id=Status.status_opgave_id
GROUP BY Opgaver.opgave_id, Opgaver.opgave_navn, (...), Status.status_id, Status.status_opgave_id, Status.status_tekst;
Avatar billede mugs Novice
18. marts 2010 - 14:54 #6
Kan du sende din db i ver 2000 som en .zip fil til:

mugs snabelting mail.dk

så ser jeg på det lidt senere.
Avatar billede dejbjerg Nybegynder
19. marts 2010 - 11:56 #7
Sry, blev afrudt igår.

Har sendt DB via mail.

Bliver meget glad, hvis du kan finde en løsning.

/dej
Avatar billede dejbjerg Nybegynder
23. marts 2010 - 10:38 #8
Hey mugs

Tak for hjælpen indtil videre

Vi er ved at nærme os, men det er både opdateringsdatoen og den opdateringstekst, som knytter sig til denne dato, som er interessant for mig.

Med dine 3 queries får jeg kun den seneste opdateringsdato med i mit resultat, og jeg kan ikke regne ud hvordan jeg får teksten med.

q1:
SELECT Opgaver.opgave_id, Opgaver.opgave_navn, Opgaver.opgave_formaal, Opgaver.opgave_fase_id, Opgaver.opgave_start, Opgaver.opgave_slut, Opgaver.opgave_interessenter
FROM Opgaver;

q2:
SELECT Status.status_opgave_id, Max(Status.status_opdateret) AS MaksOfstatus_opdateret
FROM Status
GROUP BY Status.status_opgave_id
HAVING (((Max(Status.status_opdateret))<=[Indtast dato- tidsgruppe]));

q3:
SELECT Forespørgsel1.opgave_navn, Forespørgsel1.opgave_formaal, Forespørgsel1.opgave_fase_id, Forespørgsel1.opgave_start, Forespørgsel1.opgave_slut, Forespørgsel1.opgave_interessenter, Forespørgsel2.MaksOfstatus_opdateret
FROM Forespørgsel1 INNER JOIN Forespørgsel2 ON Forespørgsel1.opgave_id = Forespørgsel2.status_opgave_id;

/Dej
Avatar billede mugs Novice
23. marts 2010 - 10:45 #9
Din db ligger hjemme. Ser på det senere idag.
Avatar billede mugs Novice
23. marts 2010 - 12:24 #10
Ny forespørgsel3:

SELECT Forespørgsel1.opgave_navn, Forespørgsel1.opgave_formaal, Forespørgsel1.opgave_fase_id, Forespørgsel1.opgave_start, Forespørgsel1.opgave_slut, Forespørgsel1.opgave_interessenter, Forespørgsel2.MaksOfstatus_opdateret, Forespørgsel2.status_tekst
FROM Forespørgsel1 INNER JOIN Forespørgsel2 ON Forespørgsel1.opgave_id = Forespørgsel2.status_opgave_id;

Ny forespørgsel2:

SELECT Status.status_opgave_id, Max(Status.status_opdateret) AS MaksOfstatus_opdateret, Status.status_tekst
FROM Status
GROUP BY Status.status_opgave_id, Status.status_tekst
HAVING (((Max(Status.status_opdateret))<=[Indtast dato- tidsgruppe]));
Avatar billede dejbjerg Nybegynder
23. marts 2010 - 14:38 #11
Hey mugs

Tusind tak for din hjælp - skriv et svar, hvis du vil have point.

Jeg har selv siddet googlet/rodet med det i dagens løb også - og er med inspiration fra det, du har lavet, kommet frem til følgende, som tilsyneladende løser opgaven også:

SELECT s1.status_id, s1.status_opgave_id, s1.status_opdateret, s1.status_tekst
FROM Status AS s1
WHERE ((s1.status_opdateret=(SELECT MAX(s2.status_opdateret)
FROM Status AS s2
WHERE s1.status_opgave_id = s2.status_opgave_id AND s2.status_opdateret <=[dato])));

Om det er optimalt ved jeg ikke, men det er lettere gennemskueligt end 3 interdependente forespørgsler.
Avatar billede mugs Novice
23. marts 2010 - 14:55 #12
Når blot det fungerer.
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