Avatar billede hirtshals Nybegynder
13. april 2001 - 16:21 Der er 27 kommentarer og
4 løsninger

SQL Sætning Søges

Jeg sidder od nørkler med en SQL Sætning - men nu trænger jeg til hjælp - lad mig her simplificere problemstillingen.

Lad os forestille os et atletik stævne, jeg har 2 tabeller - tabel 1 hedder Deltager og består af flg felter  pID som er et Autonummer, DeltagerNavn og Alder som er af typen text

Så har jeg en Resultat tabel med felterne pID, Kastlaengde, Dato

Der er lavet en en til mange relation fra Deltager.pID til Resultat.pID

I min Deltager Tabel opretter jeg nu f.eks 4 navne der deltager i min konkurence i f.eks spydkast.

Hvergang en deltager Kaster et spyd bliver kastets længde registreret i Resultat tabellen,

da der jo er relation imellem Deltager.pID og Resultat.pID, vil nogle record i resultat tabellen f.eks se således ud

pID    Kastlaengde    Dato
1        110            13-04-2001
2        105            13-04-2001
1        115            14-04-2001

Nu kommer queryet jeg skal have hjælp til - Jeg skal have lavet et Query der Lister Alle Deltagerne fra Deltager tabellen og vha Inner Join / Group skal deres længste kast (Max) fremgå i Query resultatet for hver deltager. 
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:24 #1
SELECT deltager.*,MAX(resultat.kastlaengde) FROM deltager INNER JOIN resultat ON deltager.pid=resultat.pid;

er lige hvad jeg kan komme på ..
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:25 #2
Nu har jeg jo ingen mulighed for at afprøve den så det er lige fra mit hovede ...
Avatar billede netsrac Praktikant
13. april 2001 - 16:26 #3
select max(resultat.kastlaengde), deltager.deltagernavn from resultat, deltager where deltager.pid = resultat.pid group by deltager.pid
Avatar billede netsrac Praktikant
13. april 2001 - 16:29 #4
Måske endda:

select max(resultat.kastlaengde) as topkast, deltager.deltagernavn from resultat, deltager where deltager.pid = resultat.pid group by deltager.pid
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:31 #5
giver ingen forskel i resultatet ...
Avatar billede netsrac Praktikant
13. april 2001 - 16:33 #6
tdaugaard >> Næ, men det er en del nemmere at hente feltet med et alias :-)
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:36 #7
netsrac:> faktisk ikke ..

Set Rs = Conn.Execute(\"select max(resultat.kastlaengde), deltager.deltagernavn from resultat, deltager where deltager.pid = resultat.pid group by deltager.pid\")
TopKast = Rs(0)

Set Rs = Conn.Execute(\"select max(resultat.kastlaengde) as topkast, deltager.deltagernavn from resultat, deltager where deltager.pid = resultat.pid group by deltager.pid\")
TopKast = Rs(0)

!?
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:36 #8
SELECT MAX(resultat.kastlaengde),deltager.* FROM deltager INNER JOIN resultat ON deltager.pid=resultat.pid;

Så kan man også bruge Rs(0) her ..
Avatar billede netsrac Praktikant
13. april 2001 - 16:39 #9
tdaugaard >> Okay, du har en point der :-)
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:40 #10
:-)
Avatar billede hirtshals Nybegynder
13. april 2001 - 16:47 #11
Umiddelbart kan jeg ikke få nogle af jeres Querys til at virke - redultatet skulle feks give følgende

Eksemepl på Tabel - Deltager

pID      Navn      Alder
1        Henrik    30
2        Hans      29
3        Heine    28

Eksemepl på Tabel - Resultat

ID  pID  Kastlaengde  Dato
1  1      110        13-04-2001
2  1      105        14-04-2001
3  2      100        13-04-2001
4  2        95        14-04-2001
5  3        85        13-04-2001
6  3        80        14-04-2001

Queryet skal så give flg

pID Navn    Alder  Kastlaengde Dato         
1  Henrik  30    110        13-04-2001 
2  Hans    29    100        13-04-2001
3  Heine  28      85        13-04-2001
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:49 #12
Har du mulighed for at sende mig en test DB ? e@tdaugaard.dk
Avatar billede hirtshals Nybegynder
13. april 2001 - 16:49 #13
Access 2000 eller 97 ??
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:51 #14
Access 2000 ...
Avatar billede hirtshals Nybegynder
13. april 2001 - 16:54 #15
tdaugaard >> Access 2000 DB netop afsendt
Avatar billede tdaugaard Nybegynder
13. april 2001 - 16:57 #16
fiint :-)
Avatar billede stigc Nybegynder
13. april 2001 - 17:17 #17
SELECT deltager.navn, deltager.alder, MAX(resultat.kastlaengde) FROM deltager INNER JOIN resultat ON deltager.pid=resultat.pid GROUP BY deltager.navn, deltager.alder
Avatar billede hirtshals Nybegynder
13. april 2001 - 17:41 #18
Jvf min kommentar
Kommentar fra hirtshals  13/04 2001 16:47:54 

Skal det endelige resultat se således ud

pID  Navn    Alder  Kastlaengde  Dato         
1    Henrik  30      110        13-04-2001 
2    Hans    29      100        13-04-2001
3    Heine    28      85        13-04-2001

Jeg har nu selv brugt timer på at knække nøden - uden held derfor har jeg lagt en testbase ud på flg url

http://www.viewsource.dk/test.zip

Hvis nogle kan fremtylle ovennævnte query resultat så mail løsningen til

henrik.hirtshals@mail.dk

og alle pointene er dine
Avatar billede hirtshals Nybegynder
13. april 2001 - 17:44 #19
Satte lige belønningen op til 250 pts

Løsning = points = mail med access db indeholdende korrekt query
Avatar billede stigc Nybegynder
13. april 2001 - 17:50 #20
Har du testet om min virker? Hvis den gør skal der bare liste mere på for at få de ekstra oplysninger ud:

Her er den så:

\"SELECT deltager.navn, deltager,pid, deltager.alder, resultat.dato, MAX(resultat.kastlaengde) as maxkastelaenede FROM deltager INNER JOIN resultat ON deltager.pid=resultat.pid GROUP BY deltager.navn, deltager.alder, deltager.pid, resultat.dato\"

max kastelangede fåes med rs(\"maxkastelaenede\")
Avatar billede stigc Nybegynder
13. april 2001 - 17:51 #21
her sidder jeg jo med Access 97, men vil stadigvæk tor at mit virker!
Avatar billede hirtshals Nybegynder
13. april 2001 - 18:14 #22
stigc >> Jeg kan heller ikke få dit query til at virke hverjen i Access eller på en asp side

Databsen findes i en access 97 version her

http://www.viewsource.dk/test97.zip
Avatar billede stigc Nybegynder
13. april 2001 - 20:52 #23
Jeg har givet op med den SQL sætning. Men jeg glæder mig til at se nogen der laver den.
Avatar billede stigc Nybegynder
13. april 2001 - 20:54 #24
Jeg tror ikke den kan laves med almindlig JOIN og MAX og GORUP BY, men man er nød til at lave nested SQL sætninger. Jeg har forsøgt, men kan ikke finde ud af at hive resultat-id\'er ud sammen med pID og længeste kast og Dato.

Avatar billede perla Nybegynder
14. april 2001 - 02:49 #25
Resultatet kan fås med følgende query

SELECT Deltager.pid, deltager.deltager, deltager.alder, resultat.kastlaengde, resultat.dato
FROM deltager,resultat
WHERE deltager.pid = resultat.pid and resultat.kastlaengde in (SELECT Max(resultat.Kastlaengde) AS MaksOfKastlaengde FROM resultat GROUP BY resultat.pID);

-Per
Avatar billede hirtshals Nybegynder
14. april 2001 - 10:48 #26
Perla >>  Tak skal du have - Du har virkelig virkelig fortjent pointene - Tilsidst troede jeg faktisk ikke det var Muligt,

Da der jo var rigeligt med points har jeg været lidt rundhåndet og givet tdaugaard, netsrac & stigc en lille påskønnelse som tak for hjælpen

Avatar billede hirtshals Nybegynder
14. april 2001 - 10:49 #27
Perla >> Jeg opretter selvfølgelig et Dummy spm. hvis du vil have de sidste 30 points

Dem som jeg delte imellem (tdaugaard, netsrac & stigc)
Avatar billede perla Nybegynder
14. april 2001 - 12:38 #28
Er helt fint som nu :-)
Avatar billede stigc Nybegynder
14. april 2001 - 13:12 #29
selvfølgelig, selvfølgelig. Godt gået. Jeg selv var så forkuseret på først at få  resultat.id ud og så selecete med det... Samme princip. Men jeg er sku\' glad for at se løsningen
Avatar billede stigc Nybegynder
14. april 2001 - 16:25 #30
kloge hoveder se her:

http://www.eksperten.dk/spm/64499
Avatar billede stigc Nybegynder
24. juni 2001 - 15:16 #31
hvad sker der hvis to har samme max kastelængde? SÅ virker der vist ikke.
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
Kurser inden for grundlæggende programmering

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