mysql - 选择一条记录,因为它的日期字段在另一个记录日期字段 SQL 之后 X 天
问题描述
我有一个带有列的表格 GameData;我的 nba 数据库中的 GameID、日期、开始时间、持续时间、AteamId、HteamID、Ascore、Hscore、出勤率。它基本上保存着 NBA 比赛的数据。我想选择休息 X 天后播放的特定球队的所有记录。
到目前为止,我在选择记录时遇到问题
select * from GameData where Date+2 in (Select Date from GameData) and ATeamID = 1030;
但这只是获取特定团队的日期值相隔两天的所有记录,但它不会检查两者之间是否有记录。它应该只选择最后一次比赛后 2 天的比赛,而不是比赛后 2 天的比赛,无论中间是否有比赛。
解决方案
您可以使用 unpivot tableunion all
来为每个游戏和团队生成一行,然后用于lag()
获取“上一个”游戏的日期,最后使用该信息进行过滤:
select gd.*
from (
select gd.*, lag(date) over(partition by team order by date) lag_date
from (
select gd.*, ateam team from gamedata gd
union all
select gd.*, hteam team from gamedata gd
) gd
) gd
where date > lag_date + interval 2 day
推荐阅读
- gps - 我想使用 STM32F0 和 Truestudio 从 NMEA 语句中解析 GNSS 数据
- javascript - 如何为正则表达式添加空格和换行符?
- web-scraping - 适当的设置以避免在抓取时阻塞
- qt - 使用 UI 自动化获取具有可访问名称的 QLabel 的值
- plugins - 自定义 maxscript 修饰符保存在哪里?
- python - 如何在不重新启动 jupyter notebook 的情况下在 Keras 中重新训练神经网络?
- symfony - 电子邮件验证错误 Symfony 4 后会话终止
- session - 为什么我在刷新 facebook 等页面时看不到任何加载程序?
- node.js - Battle.net API 使用 OAuth Token 返回 401 错误
- javascript - 我需要从不同的 javascript 文件中访问数据,并将其更改为字符串