我有一个表格,其中包含玩家在任何一天所采取的步骤的信息,我想从数据库中获取 3 个最高的总数,当高总数的前一天为该玩家增加了价值。由于有些玩家不是每天都登录,而是将多天的时间集中在一次更新中。
数据结构:
|---------------------------------------------------------------|
| 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 作为顶部步骤。
我在弄清楚如何执行 WHERE 命令以确保前一天有该 player_id 的条目时遇到了麻烦,并且希望能提供任何帮助以使其正常工作。