[SQL] query per dag highscores met naam

Pagina: 1
Acties:

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
Ik wil uit de tabel highscore (name,points,datum) de hoogste score per dag met die betreffende score en de naam weergegeven.
code:
1
2
3
SELECT datum, max(points)
FROM Highscore
GROUP BY datum

Ik weet dus niet hoe ik naast punten en datum ook de naam er ook bij kan opvragen. Heb op forum en google gezocht en het is geen script/query request :), als iemand even een tip kan geven, dan kan ik weer verder

Verwijderd

Toch ???
code:
1
SELECT NAME,DATUM,MAX(points) FROM Highscore GROUP BY datum;

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:05
Dan moet je 'NAME' ook in de GROUP BY zitten, en dan heb je niet de hoogste scores per dag, maar de hoogste scores per dag/per naam.

Misschien kan je het met een subquery doen.
code:
1
2
3
select max(punten), datum, (select naam from tabel t2
                            where t2.id = t1.id)
from tabel t1

https://fgheysels.github.io/


  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

Dan kan je ook een inner join gebruiken om die 2 tabellen samen te voegen zoals hierboven word beschreven. (Dit dus als je geen sub-query's kan gebruiken)

ActueleWind


  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
Op dinsdag 14 mei 2002 14:50 schreef DjMisterY het volgende:
Toch ???
code:
1
SELECT NAME,DATUM,MAX(points) FROM Highscore GROUP BY datum;
nee :D zo simpel is het niet, dan krijg je de melding dat name een onderdeel van de 'aggregate function' moet zijn. Dat hij dus bijvoorbeeld bij de group by moet staan, als ik hem daarbij zet dan krijg ik dus alle scores van een dag met de naam en niet alleen de hoogste score.

1 record uit de tabel highscore ziet er zo uit: name/points/datum. Dus naam zit niet in een andere tabel ofzo. Elke score (naam/points/datum) is dus een record.

  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 21:12
Je zou eerst de hoogste score op kunnen zoeken
code:
1
select max(points) from Highscore where datum = Datum

om vervolgens iedere score van die datum weer te geven (zo vang je ook af dat je een gedeelde eerste plek kan hebben)
code:
1
select * from highscore where datum = Datum & score = highscore

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Kijk eens bij HAVING

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Het klopt dat wat je probeert niet wil.

Ik ga er ff vanuit dat je wel een primarykey hebt gemaakt bijvoorbeeld highscore_id

Select naam, datum, point
from highscore
where highscrore_id =
select highscore_id , max(points)
from highscore
group by datum

helemaal zeker weet ik het niet maar dit komt in ieder geval in de buurt.

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
yep ik heb primary key (ID), was ik ff vergeten te noemen,
maar volgens mij werkt = operator niet op deze manier

ik heb wel hetzelfde geprobeerd met IN of EXISTS maar dat lukte ook niet

trouwens group by datum kon niet ivm aggregate function

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:05
Op dinsdag 14 mei 2002 15:18 schreef fatbenny het volgende:
yep ik heb primary key (ID), was ik ff vergeten te noemen,
maar volgens mij werkt = operator niet op deze manier

ik heb wel hetzelfde geprobeerd met IN of EXISTS maar dat lukte ook niet

trouwens group by datum kon niet ivm aggregate function
Heb je het al eens met die correlated subquery geprobeerd?

https://fgheysels.github.io/


  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
Op dinsdag 14 mei 2002 15:22 schreef whoami het volgende:

Heb je het al eens met die correlated subquery geprobeerd?
Yep, zie post van ceasar2 (die heb ik wel ff aangepast)

met onderstaande query krijg ik de alleen de allerhoogste score omdat het niet gegroepeerd is, als ik het dan groepeer dan geeft access foutmeldingen
code:
1
2
3
4
5
Select name, datum, points
from highscore 
where points  =
(select max(points) 
from highscore)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:05
Je hebt het ook met 'mijn' manier geprobeert? Wat was de foutmelding?

https://fgheysels.github.io/


  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
met onderstaande query krijg ik de alleen de allerhoogste score omdat het niet gegroepeerd is, als ik het dan groepeer dan geeft access foutmeldingen
code:
1
2
3
4
5
Select name, datum, points
from highscore 
where points  =
(select max(points) 
from highscore)

access foutmelding: subquery kan meer dan 1 resultaat geven etc

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:05
Je moet in gebruiken ipv = in dat geval.

https://fgheysels.github.io/


  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
where points =
geeft dezelfde melding als
where points IN

where EXISTS geeft alle gegevens

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:05
Op dinsdag 14 mei 2002 15:49 schreef fatbenny het volgende:
where points =
geeft dezelfde melding als
where points IN
Dat vind ik sterk...

https://fgheysels.github.io/


  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
Op dinsdag 14 mei 2002 15:54 schreef whoami het volgende:

[..]

Dat vind ik sterk...
echt zo :)

Verwijderd

Het is een dramma maar ik heb het wel

maak een view [max per dag] met de volgende def.
SELECT Max(highscore.highscore) AS MaxVanhighscore, highscore.datum
FROM highscore
GROUP BY highscore.datum;

en de query :
SELECT [max per dag].datum, highscore.naam, highscore.highscore
FROM highscore, [max per dag] where highscore.datum = [max per dag].datum and [max per dag].MaxVanhighscore=highscore.highscore;

Levert het juiste resultaat.

Dit moet je kunnen samen voegen maar daar heb ik geen zin in .

Heel veel plezier met deze oplossing.

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
het leek eerst zo simpel

ik ga het gelijk ff proberen

iig bedankt

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Kijk maar eens hier:
[topic=467841]
Daar heb ik een mogelijk oplossing gegeven. (helemaal onderaan)
Pagina: 1