Avatar billede skooter Nybegynder
15. februar 2007 - 09:38 Der er 6 kommentarer og
1 løsning

Gruppevis højeste værdi fra table

Hej

Jeg har 2 tabeller. Den ene indeholder alle kunder og den anden alle deres betalinger. I kunde-tabellen har hver kunde deres ID. I betalings-tabellen er hver kundes betalinger. Nu vil jeg gerne have sidste betaling for hver kunde. Den eneste måde jeg kan se hvilken der er den sidste er via betalings-tabellens ID (den højeste værdi).

Ind til videre har jeg det her...

SELECT *
FROM kunder
LEFT JOIN betalinger ON betalinger.kundeID = kunder.ID
AND betalinger.pubID = '1'
WHERE kunder.abbtype = '4'

... Men denne giver mig alle betalinger for hver kunde. Jeg har prøvet med en GROUP BY, men så får jeg bare den første betaling for hver kunde.

Any ideas?
Avatar billede fennec Nybegynder
15. februar 2007 - 09:56 #1
Ved faktisk ikke om de har implementeret dette i MySQL, men det kan du jo afprøve. Tror ikke det er i 3.x, måske i 4.x og 5.x versionerne:

SELECT *
FROM kunder k
LEFT JOIN betalinger b ON b.kundeID = k.ID AND b.pubID = '1'
WHERE k.abbtype = '4' and
  b.id in (select id from betalinger where kundeID=k.id order by id desc limit 1)
Avatar billede skooter Nybegynder
15. februar 2007 - 15:31 #2
Hmm... Lader det ikke til. Jeg får denne fejl...

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select id from betalinger where kundeID=k.id order by id desc l
Avatar billede skooter Nybegynder
15. februar 2007 - 15:34 #3
Min MySQL version er 4.0.24 ...
Avatar billede fennec Nybegynder
15. februar 2007 - 16:07 #4
Har lige testet i 5.x. Der virker det heller ikke. Men det er tæt på. De understøtter ikke limit i subquerys endnu. Det kan dog også gøres med max(id) i stedet. Denne virker i 5.x:

SELECT *
FROM kunder k
LEFT JOIN betalinger b ON b.kundeID = k.ID AND b.pubID = '1'
WHERE k.abbtype = '4' and
  b.id in (select max(id) from betalinger where kundeID=k.id)
Avatar billede fennec Nybegynder
15. februar 2007 - 16:10 #5
Hvis den ikke virker i 4.x kan du ikke gøre det i sql. Så skal du klare det i dit program (med et loop).
Avatar billede skooter Nybegynder
16. februar 2007 - 08:02 #6
Den melder stadig fejl...

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select max(id) from betalinger where kundeID=k.id)' at line 5

... Men tak for hjælpen. Jeg må lave noget PHP i stedet der gør det.

Vil du have point?
Avatar billede fennec Nybegynder
16. februar 2007 - 08:14 #7
.o) <-- One Eyed Jack
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