Avatar billede frets Nybegynder
24. juli 2005 - 12:31 Der er 12 kommentarer og
1 løsning

Hent værdier fra sidste runde

Hvordan får jeg hentet score fra den sidste runde?
Min nuværende query henter 1. runde, men kan man ikke få den til at hente score fra den sidste runde automatisk?

Select
members.teamname,
members.owner,
score.score,
Sum(score.score) AS points,
score.`round`
From
members
Inner Join score ON members.ID = score.teamID
Inner Join season ON season.ID = score.season
Where
season.active = '1'
Group By
members.owner
Order By
points

Giver:
teamname | owner | score | points | round
team1    | user1 | 10000 | 250000 | 1
team2    | user2 | 50000 | 900000 | 1

Skulle være:
teamname | owner | score | points | round
team1    | user1 | 45000 | 250000 | 3
team2    | user2 | 20000 | 900000 | 3
Avatar billede arne_v Ekspert
24. juli 2005 - 12:37 #1
hvis du vil have fornuftigt ud af en SUM GROUP BY så skal du lave GROUP BY
på alle de felter i du selecter undtagen SUM'en
Avatar billede frets Nybegynder
24. juli 2005 - 12:48 #2
Hmm...
Group By
members.teamname,
members.owner,
score.score,
score.`round`

Giver mig 3 rækker med team1 og 3 rækker med team2 hvor points bare er det samme som score, dvs. den ligger det ikke sammen.
Avatar billede arne_v Ekspert
24. juli 2005 - 15:07 #3
måske skal round ikke være i GROUP men i.s.f. at være MAX(round) ?

felter i select listen som ikke er en aggrerende funktion og som ikke er i group by
giver syntax fejl i de fleste databaser men mysql picker bare en tilfældig værdi og
viser den, men dte kan du jo næppe bruge til noget
Avatar billede arne_v Ekspert
24. juli 2005 - 15:08 #4
du kunne også prøve at vise input data som skal give det du ønsker - så var det måske
nemmere at foreslå en query
Avatar billede frets Nybegynder
24. juli 2005 - 17:36 #5
Her er min score tabel:

season | round | teamID | score
  3  |  1  |  1    |  10
  3  |  1  |  2    |  20
  3  |  1  |  3    |  10
  3  |  2  |  1    |  30
  3  |  2  |  2    |  10
  3  |  2  |  3    |  50

Det jeg vil have ud er at den ligger scorene sammen, samt viser den score fra den sidste runde (her runde 2)
Mit ønskede resultat:
teamID | score | samlet score
  1    |  30  |  40
  2    |  10  |  30
  3    |  50  |  60
Avatar billede arne_v Ekspert
24. juli 2005 - 23:07 #6
den er svær

SELECT teamid,score FROM scoretabel WHERE round IN (SELECT MAX(round) FROM scoretabel)

SELECT teamid,SUM(score) FROM scoretabel GROUP BY teamid

kan give 2 halvdele, men jeg er lidt usikker på hvordan man i MySQL kan
få dem smeltet sammen (nemt nok i SQLServer)
Avatar billede stigdk Nybegynder
27. juli 2005 - 09:26 #7
mit forsøg...

Conn = din connect

Set rs = Conn.Execute("SELECT MAX(round) FROM scoretabel")
max = rs("round")
maxm = max-1

"SELECT teamid,score FROM scoretabel WHERE round ="&maxm

Take it or leave it

//eXe
Avatar billede frets Nybegynder
27. juli 2005 - 17:15 #8
-stigdk
Jeg er da glad for at du gidder forsøge, men måske du skulle holde dig til noget du ved lidt mere om. Jeg har kigget på hvilke spørgsmål du har oprettet og kan se at du lige har spurgt til hvordan man connecter til mysql og helt grundlæggende sql. http://www.eksperten.dk/spm/634524
Avatar billede stigdk Nybegynder
27. juli 2005 - 18:19 #9
ja? so? jeg kan da stadig være med.. det er et forsøg... læs!

Jeg kan en masse med ACCESS og MySQL og ACCESS er ikk så anderledes... jeg havde bare ikke en connecter til mit community....

Husk lige jeg prøver på at hjælpe dig... være lidt taknemlig...
Avatar billede frets Nybegynder
27. juli 2005 - 20:38 #10
Jeg skriver da at jeg er glad for at du forsøger, men dit løsningsforslag er jo at lave arne_v's "SELECT teamid,score FROM scoretabel WHERE round IN (SELECT MAX(round) FROM scoretabel)" om til 2 db kald, så vi nu er oppe på 3 kald!
Jeg leder efter en løsning hvor det hele klares i et db kald.

Du må undskylde hvis jeg lyder lidt mavesur, men jeg synes efterhånden at der er for mange som gerne vil "hjælpe", uden at have noget at biddrage med.
Avatar billede arne_v Ekspert
27. juli 2005 - 21:06 #11
lidt granskning i MySQL finder MAX CONCAT tricket

som for din problem stilling må være noget a la:

SELECT teamid,SUBSTRING(MAX(CONCAT(LPAD(round,6,'0'),score)),7),SUM(score)
FROM scoretabel
GROUP BY teamid
Avatar billede frets Nybegynder
27. juli 2005 - 23:42 #12
Så virker det efter hensigtet...

Smid et svar så du kan få nogle point.
Avatar billede arne_v Ekspert
27. juli 2005 - 23:43 #13
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