Sortiranje po max točkah?
4 naročniki
4 naročniki
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
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);