20. december 2002 - 23:11Der er
28 kommentarer og 3 løsninger
Select Max() Group by
Jeg skal have valgt den største værdi for forskellige grupper (ID). Men når jeg skriver bare en simpel foresprøgsel, får jeg kun den højeste værdi for en enkelt gruppe. Jeg har lavet forsøget i Acccess og får det rigtige resultat med nedennævnte løsning, men det virker ikke i ASP. Er der en ekspert, der kan fortælle mig hvorfor. Kan man skrive id=rs("auk2emne.id") eller skal det bare være id=rs("auk2emne.id") - har prøvet begge løsninger, men ved ikke om det virker, da sqlstmt jo heller ikke virker i ASP
sqlstmt="SELECT auk2emne.id, Max(auk3bud.bud) AS MaksOfbud FROM auk2emne INNER JOIN auk3bud ON auk2emne.id=auk3bud.id GROUP BY auk2emne.id"
set rs=Server.CreateObject("adodb.Recordset") rs.Open sqlstmt, conn bud2=rs("MaksOfbud") gruppe=rs("gruppe") budnr=rs("budnr") id=rs("auk2emne.id")
Du skriver skam bare: sqlstmt="SELECT auk2emne.id, Max(auk3bud.bud) AS MaksOfbud FROM auk2emne INNER JOIN auk3bud ON auk2emne.id=auk3bud.id GROUP BY auk2emne.id"
Hvis du hendter mere end en kolonne som hedder id så du nød til at lave et alias for det id du vil havde sådan her:
sqlstmt="SELECT auk2emne.id as auk2emneID, Max(auk3bud.bud) AS MaksOfbud FROM auk2emne INNER JOIN auk3bud ON auk2emne.id=auk3bud.id GROUP BY auk2emne.id"
Set rs = conn.execute(strstmt) Skal være: Set rs = conn.execute(sglstmt) Der er nu hul igennem, men min side er helt blank. Der er data i min mySQL_DB, som er hentet ned i Access, hvor den er testet. Har I et bud på hvorfor resultatet er blankt?
Det kan være lidt svært at gætte uden at kende lidt til koden eller princippet i koden. En ting kunne være du får et tomt recordset og dermed e siden blank.
Men da koden er taget direkte fra Access og Acces viser det ønskede reultat, så burde det være korrekt. Der kun er ændret m.h.s til de 2 alias. Havde feltnavne været forkerte ville, der være kommet en fejlmeddelelse. Jeg kigger lige lidt nærmere. Jeg vender tilbage (I skal nok få jeres point)
Hvis jeg i stedet indsætter denne mere simple forespørgsel sqlstmt="SELECT auk2emne.id, auk3bud.bud FROM auk2emne INNER JOIN auk3bud ON auk2emne.id = auk3bud.id"
så får jeg det resultat, jeg tidligere har fået. Der må således være et problem omkring brugen af functionerne max og count - (har tillige prøvet count uden resultat.)
Så bliver resultatet: rs("id1") er der rs("id1")af; 2 er der 2af 3 er der 3af Hvis jeg indsætter yderligere max(auk3bud.mnr) as bud - for at teste på et andet felt får jeg igen blank side- Jeg har læst et andet sted her på Eksperten, at der måske kan være problemer med softwaren hos Azero. Kan det mon være tilfældet.
Der er inge af de angivene felter der er tomme. Indsætter jeg i stedet for rs("id1") rs("bud") jf ovenfor, så får jeg hhv. 2 er der 110 af 3 er der 100 af. Men funktionerne max, min avg o.s.v giver blank side.
Jeg har lige konstateret, at det er ligemeget hvad der står i Max(, siden bliver blank, men burde vel komme med en fejl meddelelse. Jeg prøver lige at droppe group by, men mener at den vil have det.
Det giver også blank side. Men der kan jo ikke være noget galt med select, når den er taget direkte fra Access og så rettet til med ". Det virker i Access.
Hvis du bruger MAX,MIN mm så vil den kun returnere en record og man kan ikke GRUOP BY enkolnne og få max af en anden komme for hvert tal i enkolnne..
enkolnne andenkolonne 1 10 1 11 2 22 2 44
Så kan man ikke: sqlstmt="SELECT auk2emne.id as id1 max(auk3bud.mnr) as bud FROM auk2emne INNER JOIN auk3bud ON auk2emne.id=auk3bud.id GROUP BY auk2emne.id"
enkolnne andenkolonne 1 11 2 44
Hvis du gør sådan her: sqlstmt="SELECT auk2emne.id as id1 max(auk3bud.mnr) as bud FROM auk2emne INNER JOIN auk3bud ON auk2emne.id=auk3bud.id"
Skulle denb gerne give dette: enkolnne andenkolonne 2 44
Ja, det er det jeg får med Access, men jeg får det i ASP (mySQL). Uanset det er med eller uden group by. Jeg kan læse formlerne alle steder, men selvom jeg laver en simpel uden join m.v. så kan den ikke, når jeg bruger max(). Det må være noget software. Jeg prøver på min Linux maskine i morgen (skal lige sættes til), hvis der er andre, der har et bud hører jeg gerne. Jeg synes I alle har gjort en flot indsats (det synes jeg I gør generelt på denne side, hvor jeg har noteret mig jeres hjælpsomhed, som må betegnes som uvurderlig).
Det er Azero, Pernille og Birgitte servere. Jeg har prøvet at droppe alias, men uden held. Jeg giver den dog et forsøg igen. Har også checket at feltet er et int.
Jeg har nu test med en anden tabel og her virker funktionen. Jeg har forsøgt at ændre feltnavn, tabelnavn, key m.v men intet hjælper. Jeg tror derfor ikke, jeg kommer videre med denne tabel og forsøger mig med en ny opsætning. Det er dog ærgerligt, at det ikke er muligt at finde fejlen. Tak for hjælpen.
Jeg fandt ud, af at fejlen skyldes datatypen. Jeg havde anvendt INT i den col. der skulle søges i. Den gav en blank side. Efter at have ændret den til FLOAT, ja så virker den.
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.