特定の日に実行されたプレーヤーのステップに関する情報を含むテーブルがあります。合計の高い日の前日にそのプレーヤーの値が追加されたときに、データベースから最も高い3つの合計を取得したいと思います。一部のプレーヤーは毎日ログに記録するのではなく、1つの更新に複数日をまとめているためです。
データ構造:
|---------------------------------------------------------------|
| id | player_id | steps | date | submitted |
|----|-----------|-------|------------|-------------------------|
| 1 | 16 | 5718 | 2012-09-06 | 2012-09-10 08:31:35.000 |
| 2 | 16 | 9837 | 2012-09-07 | 2012-09-10 08:31:17.000 |
| 3 | 16 | 10432 | 2012-09-09 | 2012-09-10 08:30:54.000 |
| 4 | 30 | 3973 | 2012-09-07 | 2012-09-10 09:34:42.000 |
| 5 | 30 | 7104 | 2012-09-08 | 2012-09-10 09:35:05.000 |
| 6 | 30 | 10916 | 2012-09-09 | 2012-09-10 09:35:29.000 |
| 7 | 9 | 6437 | 2012-09-07 | 2012-09-10 09:39:15.000 |
| 8 | 9 | 9032 | 2012-09-08 | 2012-09-10 09:40:02.000 |
|---------------------------------------------------------------|
だから私が返したいのは行です:
|---------------------------------------------------------------|
| 6 | 30 | 10916 | 2012-09-09 | 2012-09-10 09:35:29.000 |
| 2 | 16 | 9837 | 2012-09-07 | 2012-09-10 08:31:17.000 |
| 8 | 9 | 9032 | 2012-09-08 | 2012-09-10 09:40:02.000 |
|---------------------------------------------------------------|
私のクエリは現在:
SELECT TOP 3 p.name,
player_id,
steps,
date
FROM steppers_step_log
JOIN steppers_players P
ON player_id = P.id
ORDER BY steps DESC
これは、ステップの上位3つより前の日付のエントリがあるかどうかを考慮していません。現在のフォームのクエリでは、上位のステップとして10432、10916、および9837が返されます。
前日にそのplayer_idのエントリがあることを確認するために、WHEREコマンドを実行する方法を理解するのに問題があり、それを機能させるための助けをいただければ幸いです。