SQL pomoć, dovhaćanje max sa pripadajućim min

Imam u tablici: user_id, rezultat i time

Situacija jedan: trebao sam dohvatiti grupirano rezultate po user_id-u, tako da se prikazuje samo jedan, najbolji rezultat od svakog korisnika i da se sortiraju od većeg prema manjem.
To sam radio ovako:

SELECT user_id,MAX(rezultat) as rezultat FROM table GROUP BY user_id ORDER BY rezultat DESC LIMIT $startLimit,$numPerPage

Sad trebam to malo nadograditi… sve bi trebalo funkcionirati kao u primjeru gore samo najbolji rezultat pojedinog korisnika nije više onaj koji ima samo najveći “rezultat”, nego uz sebe mora imati i najmanji “time”.

Znači ako se za pojedinog korisnika ponavlja isti rezultat, treba uzeti onaj sa manjim time-om. Isto tako konačno sortiranje rezultata različitih korisnika bi trebalo ići po istom kriteriju.

Zahvaljujem za bilo kakvu pomoć!

SELECT user_id,MAX(rezultat) as rezultat,MIN(vrijeme) as minVrijeme
FROM table 
GROUP BY user_id 
ORDER BY rezultat DESC 
LIMIT $startLimit,$numPerPage

Nažalost, to nije to …ako neki igrač ima:
rezultat 5 vrijeme 7
rezultat 5 vrijeme 4
rezultat 1 vrijeme 2

…tvoj query bi dohvatio max rezultat 5, a min vrijeme 2. Dok meni treba da dohvati onaj max rezultat sa minimalnim vremenom uspoređujući samo među vremenima kod max rezultata. Znači dobro dohvaćanje bi vratilo:

rezultat 5 vrijeme 4

Vidim nisi probao kod koji sam ti dao. :-]
Edit: sad tek vidim što želiš napraviti. My bad. :slight_smile:

:stuck_out_tongue:

…a već sam krenuo gledati ponovno tvoj query i u čem je caka…jer sam taj pristup probao i prije nego sam pitao ovdje…a i za svaki slučaj još jednom nakon što si isto tako sugerirao.

No skužio sam kako si mogu pojednostavniti život, mogu uvesti dodatno polje u tablicu koji će imati:
vrijednost = rezultat*10000 +(9000-time)

…i onda ću moći raditi kao prije, ali po toj total vrijednosti.

Svejedno bi volio znati kako se to može riješiti na razini SQL-a.
Krenuo sam razmišljati u ovom smjeru:

SELECT Id, value
    FROM Scores
    WHERE value = (SELECT MAX(value) FROM Scores);

…no nisam daleko došao xd

SELECT `user_id`,`rezultat`,MIN(`vrijeme`) as MinVrijeme
FROM
(SELECT `user_id`,MAX(`rezultat`) as `rezultat`,`vrijeme`
FROM `table` 
GROUP BY `user_id`, `vrijeme` ) T
GROUP BY `user_id`,`rezultat`
ORDER BY `rezultat` DESC
LIMIT 0,1

Nadam se da sam bio od pomoći.

edit: typo

1 Like

Lijepo! … hvala :wink:

Nema na čemu. :smile:


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Profit Monkey