28. marts 2012 - 11:08Der er
7 kommentarer og 1 løsning
Hjælp til top 1 og subquery
Hej derude. Jeg har brug for hjælp til et query. Forestiller mig der skal bruges en subquery men jeg er ikke dygtig nok. Anvender MSSQL 2005.
Jeg har 2 tabeller - en med kontorer og en med eftersyn. Relationen er kontorid. Der kan være 0 til mange eftersyn pr. kontor. Det jeg gerne vil have ud, er en liste med alle kontorer hvor der er en kolonne med seneste eftersyn date og en kolonne med resultatet (et tal) fra dette eftersyn. Resultat finde i eftersyn tabellen. Mit query ser foreløbig således ud:
Select k.kontor, k.beskrivelse, (Select top 1 dato from eftersyn e where (e.kontorid = k.kontorid) as dato from kontor k
Den fungere perfekt som jeg vil - blot mangler jeg at få resultatet med ud i tabellen.
Er der lige en ekspert der kan hjælpe??? På forhånd tak.
Teknologisk gæld hæmmer konkurrenceevne, bæredygtighed, vækst og fleksibilitet. Cost Take-Out kan være en vigtig del af indsatsen for at komme videre.
29. maj 2024
Slettet bruger
28. marts 2012 - 11:53#1
Select k.kontor, k.beskrivelse, e.Dato, e.Resultat from kontor k right outer join eftersyn e on e.kontorid = k.kontorid
Synes godt om
Slettet bruger
28. marts 2012 - 11:55#2
Hov mangelde Top 1:
Select k.kontor, k.beskrivelse, e.Dato, e.Resultat from kontor k right outer join (select top 1 dato, resultat from eftersyn) e on e.kontorid = k.kontorid
Synes godt om
Slettet bruger
28. marts 2012 - 11:56#3
... også lige en sidste gang:
Select k.kontor, k.beskrivelse, e.Dato, e.Resultat from kontor k right outer join (select top 1 dato, resultat, kontorid from eftersyn) e on e.kontorid = k.kontorid
Gid det var så enkelt. Jeg har 13 kontorer og foreløbig 7 tilsyn. Din query giver alle kontorstederne 7 gange med hver sin dato og resultat. Jeg skulle gerne have største (seneste) eftersynsdato for de enkelte kontorer hvid der findes et eftersyn.
Synes godt om
Slettet bruger
28. marts 2012 - 13:42#6
Denne virker hvis du kun har ét (eller ingen) eftersyn pr. kontorid pr. dato:
select s1.*, e.Resultat from ( Select k.kontor, k.beskrivelse, k.kontorid ,(Select max(dato) from eftersyn e where e.kontorid = k.kontorid) MaxDato from kontor k ) s1 right outer join eftersyn e on e.kontorid = s1.kontorid and e.Dato = s1.MaxDato
Det virker perfekt nu. Min query jeg havde lagt udvar lidt simplificeret, men nu kører det bare.
Tak - så slap jeg alligevel for flere grå håd denne gang. Lægger du et svar?
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.