Sortiranje po max točkah?

Upam, da mi lahko kdo od mojstrov lahko pomaga... Imam en problemček s poizvedbo in sicer sestava tabele:

id   Ime    Točke   Datum
1   Janez   100     12.9.2011
2   Polde   150     12.9.2011
3   Polde   160     13.9.2011
4   Miha    150     13.9.2011
5   Lojze   130     14.9.2011
6   Polde   20      15.9.2011
7   Miha    100    16.9.2011

Trenutno uporabljam:
SELECT * FROM rezultati ORDER BY tocke DESC, datum DESC

Sicer OK, ampak je problem, da se uporabniki na lestvici ponavljajo s slabšimi rezultati, tako da bi rad združil uporabnike po imenu...
SELECT * FROM rezultati GROUP BY ime ORDER BY tocke DESC, datum DESC
...združi po imenu ampak mi ne razvrsti po točkah oziroma datumu - kako naj to rešim?

Če uporabim tole:
SELECT ime, max(tocke), datum FROM rezultati GROUP BY ime ORDER BY tocke DESC, datum DESC
...potem mi sicer razvrsti po točkah ampak mi poleg nekaterih točk napačen datum vpiše, verjetno od drugega rezultata...

Sigurno ima kdo izkušnje s tako poizvedbo in ima kakšno optimalno rešitev?

4 odgovori

Če daš samo navaden GROUP BY potem združi po zadnjem datumu.

Tole bi moralo delati (rešitev s subquerijem):

SELECT * FROM (SELECT * FROM test ORDER BY tocke DESC) as r GROUP BY ime ORDER BY tocke DESC

3

Group by ti ne bo nič pomagal če boš imel različne podatke, group by pomaga samo pri tem če imaš vse podatke iste.

Vbistvu se moreš najprej vprašat kaj hočeš? Prikazat koliko je max točk kdo dobil in kdaj?

Potem vzemi zadnji query in v gorup by daj še datum pa bi ti moralo delat.

Tole deluje na (malo starejši =) Oracle bazi. Problem bi nastal edino, če bi imel recimo Polde enake točke na dva različna datuma.

select * from rezultati
where (ime,tocke) in
(select ime,max(tocke)
from rezultati
group by ime);

Meni je izgleda boskor rešitev pomagala in izgleda, da deluje kot mora. Hvala!

inkanet; podobno rešitev sem spacal sam, ampak je bil problem pri enakih točkah, zato sem potreboval drugo rešitev.