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
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
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
Pořád se mi to nedaří nějak dát dohromady, ani s tím příkladem.
Taps
Profil
Trsak:
Jakou máš struktuu databáze?
Trsak
Profil
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
Trsak:
http://sqlfiddle.com/#!2/2df974/6
Trsak
Profil
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
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: