27. oktober 2006 - 09:03Der er
7 kommentarer og 1 løsning
Få den første observation fra hver gruppe i en kolonne for sig
Jeg har brug for hjælp til en sql forespørgsel. SQL'en skal tage den første forekomst af en gruppe og så lave en kolonne hvor den første forekomst i gruppen går igen for hver gruppe. Lidt kryptisk forklaring men nedenfor har jeg vist hvad det er jeg gerne vil.
Gruppe model timer opr_timer a 06-06 100 100 a 06-07 50 100 a 06-08 20 100 a 06-09 5 100 b 06-08 50 50 b 06-09 10 50
Det er altså kolonnen opr_timer jeg gerne vil lave, de 3 andre kolonner er givet.
Tak for det, men det virker ikke på alle forekomster, da mit eksempel data var mangelfuldt. Jeg har nemlig nogle hvor timerne ikke er maxvaerdi, altså for eksempel hvor den første forekomst er 50 timer og den næste er 60. Det er model kolonnen der angiver om det er den første forekomst. Model kolonnen angiver en periode, først året og dernæst måneden. Denne kolonne er tekst, men det er muligt at sortere på den med "order by model asc", så den første forekomst kommer først. Jeg kan selvfølgelig lave model kolonnen om til tal og så bruge den fremgangsmåde du har beskrevet blot med minvaerdi på model istedet for maxvaerdi.
SELECT TabelNavn.Gruppe, TabelNavn.model, TabelNavn.timer, Max(TabelNavn_1.timer) AS opr_timer FROM TabelNavn INNER JOIN TabelNavn AS TabelNavn_1 ON TabelNavn.Gruppe = TabelNavn_1.Gruppe GROUP BY TabelNavn.Gruppe, TabelNavn.model, TabelNavn.timer;
Supersmart med join til sig selv, så det hele ligger i en forespørgsel. Men samme problematik på MAX(timer) som spg's svar, da det ikke er denne kolonne der afgør om det er første forekomst men derimod kolonnen model.
Synes godt om
Slettet bruger
27. oktober 2006 - 11:11#5
Du skal jo så have flettet First(Tabelnavn.Model) ind...
Synes godt om
Slettet bruger
27. oktober 2006 - 11:18#6
Hvis vi nu gør, som før, så forespørgsel 1, kaldet FirstVaerdi:
SELECT TabelNavn.Gruppe, First(TabelNavn.Model) AS FirstOfModel FROM TabelNavn GROUP BY TabelNavn.Gruppe;
Næste kaldet GrpTimer:
SELECT TabelNavn.Gruppe, TabelNavn.Timer FROM TabelNavn INNER JOIN FirstVaerdi ON (TabelNavn.Gruppe = FirstVaerdi.Gruppe) AND (TabelNavn.Model = FirstVaerdi.FirstOfModel);
Og endeligt:
SELECT TabelNavn.Gruppe, TabelNavn.Model, TabelNavn.Timer, GrpTimer.Timer AS opr_timer FROM GrpTimer INNER JOIN TabelNavn ON GrpTimer.Gruppe = TabelNavn.Gruppe ORDER BY TabelNavn.Gruppe, TabelNavn.Model;
Hvis vi så bare lige kan få Kabbak til at samle det i en forespørgsel, så ville det være helt perfekt!~)
Synes godt om
Slettet bruger
27. oktober 2006 - 11:20#7
Lidt afhængigt af din tabel, så er du måske nød til at "order by" gruppe og model i den første forespørgsel..
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.