Avatar billede lsskaarup Nybegynder
21. oktober 2008 - 16:02 Der er 8 kommentarer og
1 løsning

Udtræk af non group by kolonner fra 2 tabeller

Jeg har 2 tabeller, som på en eller anden måde skal samles og trækkes data ud fra. Mit store problem, er at jeg skal have kolonner ud, som ikke er i GROUP BY, og hvordan det skal klares, kan jeg ikke lige gennemskue. Jeg har rodet rundt med group by, fordi jeg skal trække den højeste revision ud for et tilbud.

Fra tabellen tilbud skal jeg have tilbud (tilbudsnummer) og rev (revision) ud.

Fra tabellen tilbud0 skal jeg have felterne tilbudsnummer (svarer til tilbud.tilbud), r9 m.fl.

Altså skal jeg have joinet de 2 tabeller, fundet max af revision for hvert tilbud, og trukket data ud, som er f.eks. non group by.

MySQL versionen er 4.1.7, så views er ikke en mulighed.
Avatar billede fsconsult.dk Nybegynder
21. oktober 2008 - 17:31 #1
hvis du bruger GROUP BY kan du kun udtrække data som enten er i GROUP BY, eller som hentes via en aggregeringsfunktion som f.eks. MIN, MAX, AVG.
Avatar billede arne_v Ekspert
21. oktober 2008 - 17:52 #2
Faktisk tillader MySQL at man angive andre kolonner end aggregrede funktioner og
group by kolonner - saa tager MySQL tilfaeldige raekker for de andre - men hvem
pokker er interesseret i tilfaeldige data.

Jeg tror at du skal satse paa noget lignende:

SELECT tilbud.tilbudsnummer,tilbud.rev,tilbud0.tilbudsnummer,tilbud0.r9
FROM tilbud t1,tilbud0
WHERE tilbud.tilbudsnummer=tilbud0.tilbudsnummer AND
      rev = (SELECT MAX(rev) FROM tilbud t2 WHERE t2.tilbudsnummer=t1.tilbudsnummer)
Avatar billede lsskaarup Nybegynder
22. oktober 2008 - 08:44 #3
Er godt klar over, at man ikke kan trække data ud som ikke er i group by, der af også overskriften "Non group by"... ;-)

Arne_v: Jeg prøver lige din query
Avatar billede lsskaarup Nybegynder
22. oktober 2008 - 09:00 #4
Hmm, har tilpasset query men får ikke noget resultat ud. Den fejler ikke, men finder intet...
Avatar billede lsskaarup Nybegynder
22. oktober 2008 - 16:05 #5
Kan se at jeg fik skrevet noget forkert i formuleringen. Tilbudsnummer svarer ikke til tilbud.tilbud, men derimod tilbud.id...

Jeg er dog kommet en løsning lidt nærmere, men er der nogen mulighed for at genbruge et udtræk i selv samme query?

SELECT tilbudsnummer, r9, (SELECT MAX(rev) FROM tilbud WHERE tilbud = ".$foo['tilbud'].") AS maxREV, (SELECT id FROM tilbud WHERE tilbud = ".$foo['tilbud']." ORDER BY rev DESC LIMIT 0,1) AS id FROM tilbud0 WHERE tilbudsnummer =

tilbudsnummer til sidst skal være lige med det id jeg trækker ud via (SELECT id FROM tilbud WHERE tilbud = ".$foo['tilbud']." ORDER BY rev DESC LIMIT 0,1), men er det muligt?
Avatar billede arne_v Ekspert
24. oktober 2008 - 00:51 #6
Alt bliver nemmere hvis du bruger JOIN.
Avatar billede lsskaarup Nybegynder
24. oktober 2008 - 08:53 #7
Ja, kan bare ikke rigtigt få det til at virke, men det kan jeg så heller ikke uden join... ;-)
Avatar billede lsskaarup Nybegynder
18. februar 2009 - 13:15 #8
arne_v, smide et svar
Avatar billede arne_v Ekspert
19. februar 2009 - 01:37 #9
ok
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
Computerworld tilbyder specialiserede kurser i database-management

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