gpt4 book ai didi

SQL Server - 在前一个日期不为空时获取最大值

转载 作者:行者123 更新时间:2023-12-02 05:26:07 24 4
gpt4 key购买 nike

我有一个表格,其中包含玩家在任何给定日期采取的步数信息,我想从数据库中获取 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 的条目时遇到了问题,如果能帮助它正常工作,我将不胜感激。

最佳答案

是这样的吗?

SELECT TOP 3 p.name,
player_id,
steps,
date
FROM steppers_step_log
JOIN steppers_players P
ON player_id = P.id
WHERE EXISTS
(
SELECT 1 FROM steppers_step_log ssp
WHERE ssp.player_id = P.id
AND date = DATEADD(day, -1, steppers_step_log.date)
)
ORDER BY steps DESC

DATEADD (Transact-SQL)

关于SQL Server - 在前一个日期不为空时获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13071766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com