私は毎日真夜中にスクリプトによって更新される高いスコアの表を持っています。今日の日付でmax(列)から単一行を見つけるためのmySQL自己結合テーブル
テーブル名:hiscores
+-------+-------+---------------------+
| user | score | time |
+-------+-------+---------------------+
| Bob | 100 | 2017-10-24 00:00:04 |
| Frank | 105 | 2017-10-24 00:00:05 |
| Ahmed | 44 | 2017-10-24 00:00:06 |
| Frank | 77 | 2017-10-25 00:00:04 |
| Bob | 101 | 2017-10-25 00:00:05 |
| Ahmed | 100 | 2017-10-25 00:00:06 |
+-------+-------+---------------------+
私は今日置かれ、最も高いスコアをユーザに戻りたいです。
| Bob | 101 | 2017-10-25 00:00:05 |
は当初、私はこれを試してみました: - 間違った日付/時刻を
最高得点で単一の行を返さSELECT hs.time, hs.user, hs3.high_score
FROM `hiscores` AS hs
JOIN (SELECT MAX(hs2.score) AS high_score
FROM `hiscores` AS hs2
) AS hs3
ON hs.score = hs3.high_score
今日の日付が2017年10月25日で、必要な結果と仮定すると、
。
| Bob | 101 | 2017-10-25 00:00:04 |
は、次に私が試した:
正しいユーザーを返し、得点が、(すべての回で)上の3行
SELECT hs5.hs_time, hs.user, hs3.high_score
FROM `hiscores` AS hs
JOIN (SELECT MAX(hs2.score) AS high_score
FROM `hiscores` AS hs2
) AS hs3
ON hs.score = hs3.high_score
JOIN(SELECT hs4.time AS hs_time FROM `hiscores` AS hs4) AS hs5
ON DATE(hs5.hs_time) = DATE(NOW())
。
| Bob | 101 | 2017-10-25 00:00:04 |
| Bob | 101 | 2017-10-25 00:00:05 |
| Bob | 101 | 2017-10-25 00:00:06 |
私は間に多くのことを試みましたが、それらの2つだけではありませんが、それらは私の最も近い試みです。私は問題を見ることができますが、それを修正する方法はありません。
問題を部品に分割します。今日最高得点の行を選ぶためにオリジナルに加えて何が必要でしょうか?その後、名前を取得するには?次に重複を取り除くには? PS今日、複数の人が最大値を持っていたら? – philipxy