08. oktober 2010 - 10:28Der er
10 kommentarer og 1 løsning
trække maxværdi + id-felt fra samme tabel
Hej Eksperter,
Jeg kan ikke finde ud af at hente de records fra en tabel hvor datoværdien er højest for hver forekomst af fremmednøglen fra en anden tabel. Måske er der hjælp at hente her?
2 tabeller: Udstyr og Godkend. For hvert stykke udstyr kan der forekomme flere godkendelser. Jeg skal have fat i den seneste godkendelse på hvert stykke udstyr. Jeg skal bruge både UdstyrID, Max GodkendDato og GodkendID for hvert stykke udstyr i Godkendtabellen.
t_Udstyr har felterne: Identitet(primær nøgle), Navn, Købsdato, typenr, statusnr, Bemærkning, Ejer, Lokation, Godk (fremmednøgle til t_Godkend)
t_Godkend har felterne: GodkendID (primær nøgle), GodkDato, Godkender, GodkendLobetid, Udstyr (fremmednøgle til t_Udstyr)
Naarrh, den holder ikke helt. Jeg kan ikke undlade at gruppere på GodkendID også, og så ryger idéen ligesom, da jeg kun skal have 1 GodkendID for hver Udstyr nemlig den hvor Datoen er Maxdato for udstyrsnummeret.
Jeg tror jeg selv har fået fat i det, men jeg holder lige spørgsmålet åbent, da jeg skal have kædet den sammen med en anden forespørgsel for at få en rapport ud af det i Access.
Nedenstående ser umiddelbart ud til at kunne gøre det:
SELECT t_Godkend.Udstyr, t_Godkend.GodkendID, t_Godkend.GodkDato FROM t_Godkend WHERE t_Godkend.GodkDato = (Select max(g.GodkDato) FROM t_Godkend as g WHERE g.Udstyr = t_Godkend.Udstyr)
Havde ikke lige set dit indlæg buzzzz, men det er rigtigt at jeg må aggregere på GodkendID også, men som sagt ovenover så er det jo unikt (primærnøgle) så det giver ikke lige noget
Hej Buzzz, GodkendID er autonummer. Men dels er det værdierne fra t_Godkend jeg er interesseret i og dels ser det ikke ud til at Access kan tygge sig gennem din sql, da den ikke kan se dine join felter (G.UdstyrID og U.UdstyrID). Men jeg tror, at jeg har løsningen, skal bage "liige" kombinere den med en anden forespørgsel
Fik løst det. Problemet var et felt der var havnet i den forkerte tabel i databaseopbygningen Der skulle ikke være en reference til t_Godkend i t_Udstyr, da t_udstyr er 1 siden i 1:M relationen mellem de to tabeller.
Find records med maxdato per Udstyr:
SELECT t_Godkend.Udstyr, t_Godkend.GodkendID, t_Godkend.GodkDato, t_Godkend.Godkender, t_Godkend.GodkLobetid FROM t_Godkend WHERE t_Godkend.GodkDato = (Select max(g.GodkDato) FROM t_Godkend as g WHERE g.Udstyr = t_Godkend.Udstyr);
Find Oplysninger om Udstyr fra t_Udstyr, t_Status og t_Lokation:
SELECT t_Udstyr.Identitet, t_Udstyr.Navn, t_Udstyr.Godk, t_Udstyr.Ejer, t_Status.Status, t_Lokation.LokNavn FROM t_Status INNER JOIN (t_Lokation INNER JOIN t_Udstyr ON t_Lokation.LokID = t_Udstyr.Lokation) ON t_Status.StatusID = t_Udstyr.StatusNr WHERE (((t_Udstyr.Godk) Is Not Null));
Join de 2 forespørgsler og beregn udløbsdato:
SELECT f_Godkend2.Identitet, f_Godkend2.Ejer, f_Godkend2.Status, f_Godkend2.Navn, f_Godkend2.LokNavn, DateAdd("d",[F_Godkend1.GodkLobetid],F_Godkend1.GodkDato) AS Udlob, F_Godkend1.Godkender FROM F_Godkend1 INNER JOIN f_Godkend2 ON F_Godkend1.Udstyr = f_Godkend2.Identitet;
Takker Authiel og Buzzzz for hjælpen. Buzzzz må gerne lægge et svar, så jeg kan give point.
Ja, er med på at det ikke ligefrem er performance fremmende, med da det er til en DB med ganske få brugere. springer jeg over i første omgang, og moser videre. Men du skal have tak for dit input.
mvh Henrik
Synes godt om
Ny brugerNybegynder
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.