webForumDet fria alternativet

Group By och Max

Databaser & SQL

15 svar · 521 visningar · startad av Zerephina

Medlem sedan sep. 2000206 inlägg
Frågan#1

Hopas att jag nu lyckas förklara vad jag vill ha ut...

Ur en tabell så hämtar jag hundnamn, detta är kopplat via ett id nummer till en tabell med resultat.

Som jag får ut nu så listas alla resultat. Dvs har hunden 5 resultat så skriva hunden namn och resultat ut 5 ggr.

Jag skulle vilja at varje namn bara listas en gång per hund och med det resultat som är bäst.

SQL = "SELECT h.hund_id, h.hund_namn, j.reg_nr, j.pris " & _
" FROM hundar h, jaktprov j " & _
" WHERE h.hund_namn LIKE 	'" & Request.Form("hund_namn") & "%' " & _
" AND h.hund_id=j.reg_nr " & _
" AND j.pris >= " & Request.Form("jaktprov") & " " & _
" ORDER BY j.pris DESC,h.hund_namn"

(Jag har försökt att snygga till koden lite för att det ska passa bättre här, har ju massor av tab annars... Men vet inte om jag direkt lyckades ;))

Medlem sedan sep. 2001118 inlägg
#2

SQL = "SELECT h.hund_id, h.hund_namn, MAX(j.pris) as maxpris " & _
" FROM hundar h, jaktprov j " & _
" WHERE h.hund_namn LIKE '" & Request.Form("hund_namn") & "%' " & _
" AND h.hund_id=j.reg_nr " & _
" AND j.pris >= " & Request.Form("jaktprov") & " " & _
" GROUP BY h.hund_namn ORDER BY maxpris DESC"

Så kanske ? .. gissar lite ..

Medlem sedan nov. 20017 144 inlägg
#3

det var inget

Medlem sedan sep. 2000206 inlägg
#4

Jag har försökt med MAX() på längden och på tvären utan att få det att fungera... Nått fel gör jag ;)

Medlem sedan sep. 2001118 inlägg
#5

Vad får du för resultat ?

testa ändra följande:
AND maxpris >= " & Request.Form("jaktprov")

Medlem sedan juni 200032 967 inlägg
#6

Redovisa gärna felmeddelande och berätta vad det gäller för dbms.

Medlem sedan sep. 2000206 inlägg
#7

Ehum.

SQL = "SELECT h.hund_id, h.hund_namn, j.reg_nr, MAX(j.pris) as maxpris " & _	
"FROM hundar h, jaktprov j " & _
"WHERE h.hund_namn LIKE 	'" & Request.Form("hund_namn") & "%' " & _
"AND h.hund_id=j.reg_nr " & _
"AND maxpris >= " & Request.Form("jaktprov") & " "

Felmed:
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'hund_id'.
/hittathund.asp, line 20

Jag kör Access lokalt på datorn...

Medlem sedan juni 200032 967 inlägg
#8

Alla fält i SELECT, som inte är en mängdfunktion, måste finnas med i GROUP BY, till att börja med.

Medlem sedan dec. 200012 464 inlägg
#9

Att använda korrelationsnamn

AND maxpris

går inte. Jag förstår heller inte varför du har med både hund_id och reg_nr i select då de ändå alltid har samma värde.

Dvs

SQL = "SELECT h.hund_id, h.hund_namn, MAX(j.pris) as maxpris " & _	
"FROM hundar h, jaktprov j " & _
"WHERE h.hund_namn LIKE 	'" & Request.Form("hund_namn") & "%' " & _
"AND h.hund_id=j.reg_nr " & _
"AND j.pris >= " & Request.Form("jaktprov") & 
" group by h.hund_id, h.hund_namn
Medlem sedan juni 200032 967 inlägg
#10

Jag hade nog provat så här:

SQL = "SELECT [b]TOP 1[/b] h.hund_id, h.hund_namn, j.reg_nr, j.pris " & _
" FROM hundar h, jaktprov j " & _
" WHERE h.hund_namn LIKE 	'" & Request.Form("hund_namn") & "%' " & _
" AND h.hund_id=j.reg_nr " & _
" AND j.pris >= " & Request.Form("jaktprov") & " " & _
" ORDER BY j.pris DESC,h.hund_namn"

Om du ändå får fler resultat, lägg till något mer att sortera på, som alltid är unikt (ett räknarvärde i någon av tabellerna exempelvis).

mvh

Medlem sedan sep. 2000206 inlägg
#11

Tack nu lyckades jag med Group By iaf!! Jag började att lägga till alla pg de felmeddelande jag fick, men tyckte att det verkade ologiskt. Då var det ju inte det. Så nu gäller det bara att få ut det högsta resultatet.

Lars G, jag brukar göra så när jag är osäker ;) Då lägger jag till alla parametrera som jag använder bara för att inte sitta och söka efter något som skulle ha skrivits in...

Anders, jag får upp endast en hund när jag testar din kod :) Top 1 antar jag :D

Direkt jag försöker att köra MAX så får jag meddelande: "Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'hund_id'."

Medlem sedan juni 200032 967 inlägg
#12

Jag ser nu att jag missförstått din fråga en aning. Jag ber att få be om ursäkt för slarvet. :)

Medlem sedan sep. 2000206 inlägg
#13

attans också att du gjort det...

Medlem sedan sep. 2000206 inlägg
#14

Genom att sätta GROUP BY och sen HAVING j.pris >= " & Request.Form("jaktprov") & " så får jag ju fram alla resultat grupperat som är över just det. *skitirriterad att max inte fungerar*

Medlem sedan sep. 2000206 inlägg
#15

Felet är att reg_nr är ett textfält. Jag får det att fungera om jag gör om det till tal. Bara det att det inte går att ändra alla poster till tal eftersom att det finns en bokstav i varje reg.nr *jaha*

Medlem sedan sep. 2000206 inlägg
#16

Jag lyckades lösa det...

SELECT h.hund_namn, MAX(j.pris) AS maxpris	
FROM jaktprov j, hundar h
WHERE h.hund_id=j.reg_nr
AND h.hund_id=u.reg_nr
GROUP BY j.pris, h.hund_namn
HAVING j.pris <= "& jaktprov &"

I princip så, jag har "tvättat" koden lite och kan ha tappat nån snutt här eller var! :D

268 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)