Sortiranje po max točkah?
 
Spirit 7. okt 2011 14:46:16 Pridružen od:
7. okt 2011
22 objav
18 24 0
#1

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?


všeč(0) ni všeč(0) spam(0)
 
boskor 7. okt 2011 16:00:08 Pridružen od:
14. sep 2011
18 objav
7 1 0
#2

Č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


všeč(3) ni všeč(0) spam(0)
 
Tody 7. okt 2011 17:43:32 Pridružen od:
3. maj 2010
1446 objav
1411 299 25
#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.


všeč(0) ni všeč(0) spam(0)
![](http://www.internetmojster.com/splosno/dobrodelna-akcija.html)
 
inkanet 7. okt 2011 20:16:04 Pridružen od:
3. okt 2008
328 objav
110 1 2
#4

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);


všeč(0) ni všeč(0) spam(0)
 
Spirit 10. okt 2011 11:20:44 Pridružen od:
7. okt 2011
22 objav
18 24 0
#5

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.


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se