[SQL/Access] hoogste waarde uit column

Pagina: 1
Acties:
  • 665 views sinds 30-01-2008
  • Reageer

  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024
Het volgende probleem doet zich voor, ik heb een tabel met de volgende gegevens:

code:
1
2
3
4
5
6
7
Datum     Punten  User
01-01-06  1       A
02-01-06  3       A
03-01-06  5       A
01-01-06  1       B
02-01-06  2       B
03-01-06  4       B


Wat ik nu wil is in (het liefst) één SQL query het volgende ophalen:
code:
1
2
3
Datum     Punten  User
03-01-06  5       A
03-01-06  4       B
Oftewel, de rows met de hoogste datum van alle users moet 1x gereturned worden.

Ik heb het met de volgende query geprobeerd:
code:
1
SELECT `User`, max(`Datum`), `Punten` FROM `Users` GROUP BY `User`


Dan geeft hij de melding dat Punten niet in een aggregate functie zit. Dit klopt want hij zou niet weten wat hij voor punten terug moet geven natuurlijk. MAAR de combinatie User+Datum is uniek in deze tabel (primary key). Dus dan is er altijd maar één rij die overeenkomt. Maar hoe krijg ik die nu terug?

  • lier
  • Registratie: Januari 2004
  • Laatst online: 00:04

lier

MikroTik nerd

Even uit mijn hoofd ("zonder garatie"):

code:
1
2
3
4
5
SELECT outer.User, outer.Datum, outer.Punten
FROM Users outer
WHERE outer.Datum = 
(SELECT max(inner.Datum) FROM Users inner
WHERE outer.User = inner.User)


Je hebt dus altijd een subquery nodig !

[ Voor 6% gewijzigd door lier op 05-03-2006 13:29 ]

Eerst het probleem, dan de oplossing


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
SQL:
1
2
3
4
SELECT Datum, User, Punten
FROM Tabel t
WHERE Datum =(SELECT MAX(Datum) FROM Tabel WHERE User = t.user)
GROUP BY Datum,Users, Punten


Let er trouwens op dat user een gereserveerde naam is volgens mij, als je foutmeldingen krijgt moet je er blokhaken ([ ]) omheen plaatsen.


/laat

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024
Dank u, het is gelukt. Ik had alleen gehoopt dat het misschien in 1 query kon zonder subqueries!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Rodyman schreef op zondag 05 maart 2006 @ 13:36:
Dank u, het is gelukt. Ik had alleen gehoopt dat het misschien in 1 query kon zonder subqueries!
Dat moet zo ook wel lukken:

SQL:
1
2
3
4
5
SELECT max(t1.Datum) ,t1.User, t1.Punten
FROM Tabel t1
INNER JOIN tabel t2 ON  t1.user = t2.user
GROUP By t1.User, t1.Punten
HAVING max(t1.Datum) = MAX(t2.datum)

[ Voor 3% gewijzigd door P_de_B op 05-03-2006 13:46 ]

Oops! Google Chrome could not find www.rijks%20museum.nl