hiscore リストを作成したいのですが、なかなかできません。これは私の hiscore テーブルで、すべてのゲームでユーザー スコアをこのテーブルに書き込みます。
これは私の hiscore テーブルがどのように見えるかです:
id user_id user_name score entry_date
-----------------------------------------------------------
1 1 tom 500 2012-06-05 14:30:00
2 1 tom 500 2012-06-05 10:25:00
3 2 jim 300 2012-06-05 09:20:00
4 2 jim 500 2012-06-05 09:22:00
5 3 tony 650 2012-06-05 15:45:00
最初の 3 つの MAX スコアを取得したいのですが、それらが同じスコアであるかどうかを確認する必要がある場合は、最初に入力されたスコアを取得する必要があります (entry_date
列に基づいて)
返されるクエリは次のようになります。
1. 3 tony 650 2012-06-05 15:45:00 <- hi have to be first, because he have top score
2. 2 jim 500 2012-06-05 09:22:00 <- jim have the same score as tom, but he make that score before tom did so he is in second place
3. 1 tom 500 2012-06-05 10:25:00 <- tom have 2 entries with the same score, but we only take the one with smallest date
これは私が書いた SQL クエリですが、そのクエリで hiscore リストを取得していますが、entry_date で並べ替えられておらず、この問題を解決する方法がわかりません。
SELECT TOP 3
hiscore.user_id,
hiscore.user_name,
MAX(hiscore.score) AS max_score,
FROM
hiscore
GROUP BY
hiscore.user_id, hiscore.user_name
ORDER BY
max_score DESC
更新: スコア合計の質問について
スコアの合計については、元の hiscore テーブルをクエリするときにこれを返すクエリが必要です。
user_id user_name score
--------------------------------
1 Tom 1000
2 Jim 800
3 Tony 650
また、スコアの合計が同じユーザーが 2 人いる場合、hiscore テーブルのエントリが少ないユーザーの方がランクが高くなります。