Pokud to chcete postaru, bez WITH nebo window funkcí, použijte pro „setřesení“ těch vícenásobných záznamů do jednoho GROUP BY a nějakou agregační funkci, která vám z těch vícenásobných záznamů vybere ten správný. Pokud chcete vybírat např. nejmladší záznam a víte, že nikdy nebudou dvě nejvyšší skóre jednoho hráče ve stejný den, můžete vzít maximum z data. A nebo pokud předpokládáte, že se záznamy do databáze vkládají chronologicky a ID se přiděluje ze sekvence, můžete použít maximální id.
SELECT ps.*
FROM player_score ps
WHERE ps.id IN (
SELECT MAX(id)
FROM player_score ps2
WHERE ps2.created_at >= '2000-01-01' AND ps2.score = (
SELECT MAX(ps3.score)
FROM player_score ps3
WHERE ps3.player_id = ps2.player_id AND ps3.created_at >= '2000-01-01'
)
GROUP BY ps2.player_id
)
No a nebo pokud je vám jedno, který ze záznamů se vrátí u těch vícenásobných maximálních skóre, a používáte MySQL, která se pro vracení náhodných dat náramně hodí, udělejte prostě na tom vnějším SELECTu GROUP BY player_id – MySQL do výsledné sady sama náhodně vybere jeden z těch vícenásobných záznamů:
SELECT ps2.*
FROM player_score ps2
WHERE ps2.created_at >= '2000-01-01' AND ps2.score = (
SELECT MAX(ps3.score)
FROM player_score ps3
WHERE ps3.player_id = ps2.player_id AND ps3.created_at >= '2000-01-01'
)
GROUP BY ps2.player_id