Autor | Zpráva | ||
---|---|---|---|
Trsak Profil |
Zdravím, mám následující SQL dotaz:
SELECT m.id, m.name, d.points, d.rank, d.villages FROM dk_players as m JOIN dk_players_data AS d on d.player_id = m.id GROUP BY d.player_id ORDER BY d.rank ASC LIMIT 5 Funguje jak má, až na jednu věc. V tabulce dk_players_data je sloupec update_time a já potřebuji vypsat jen řádky s nejnovějším update_time. Když proběhne Group By tak se zobrazují nejstarší data, potřeboval bych do GROUP BY vložit tedy něco jako Order by updated_time, jak toho docílit? |
||
lionel messi Profil |
#2 · Zasláno: 26. 12. 2014, 11:02:04
Trsak:
SELECT m.id, m.name, d.points, d.rank, d.villages, d.updated_time FROM dk_players as m JOIN dk_players_data AS d on d.player_id = m.id GROUP BY d.player_id ORDER BY d.rank ASC, d.updated_time DESC LIMIT 5 Prípadne vyhoď z ORDER BY d.rank (ak chceš zoraďovať len podľa dátumu).
|
||
Kajman Profil |
#3 · Zasláno: 27. 12. 2014, 00:37:03
Trsak:
Viz třetí příklad z Některé časteji řešené dotazy pro MySQL - FAQ » Nalezení řádků s maximální (minimální) hodnotou lionel messi: To nepomůže. |
||
Trsak Profil |
#4 · Zasláno: 27. 12. 2014, 11:22:10
Pořád se mi to nedaří nějak dát dohromady, ani s tím příkladem.
|
||
Taps Profil |
#5 · Zasláno: 27. 12. 2014, 11:57:23
Trsak:
Jakou máš struktuu databáze? |
||
Trsak Profil |
#6 · Zasláno: 27. 12. 2014, 12:19:28
Taps:
dk_players: id | name 51 | Fear 53 | Kear 59 | Near dk_players_data: player_id | tribe_id | points | villages | rank | update_time 51 | 1 | 20 | 5 | 1 | 2014-12-26 11:00:37 53 | 5 | 19 | 4 | 2 | 2014-12-26 11:00:37 59 | 6 | 18 | 2 | 3 | 2014-12-26 11:00:37 51 | 1 | 20 | 5 | 1 | 2014-12-26 10:00:37 53 | 4 | 19 | 4 | 2 | 2014-12-26 10:00:37 59 | 6 | 18 | 2 | 3 | 2014-12-26 10:00:37 51 | 1 | 20 | 5 | 2 | 2014-12-26 09:00:37 53 | 2 | 19 | 4 | 3 | 2014-12-26 09:00:37 59 | 1 | 21 | 6 | 1 | 2014-12-26 09:00:37 |
||
Taps Profil |
#7 · Zasláno: 27. 12. 2014, 13:09:39
|
||
Trsak Profil |
#8 · Zasláno: 27. 12. 2014, 14:15:04
Taps:
Jak pak můžu vybírat další hodnoty? Když přidám sloupec rank, tak už to nefunguje: http://sqlfiddle.com/#!2/1d72f/1/0 |
||
Kajman Profil |
#9 · Zasláno: 27. 12. 2014, 15:28:24
Trsak:
Můžete, ale musíte použít odkázanou variantu s faq. Něco jako SELECT p.*, t1.* FROM (SELECT t2.player_id, Max(t2.update_time) AS cas FROM dk_players_data t2 GROUP BY t2.player_id) t3 JOIN dk_players_data t1 ON t1.player_id = t3.player_id AND t1.update_time = t3.cas JOIN dk_players p ON p.id = t3.player_id ORDER BY t1.rank ASC LIMIT 5 |
||
Časová prodleva: 9 let
|
0