首页 > 解决方案 > 选择一条记录,因为它的日期字段在另一个记录日期字段 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 天的比赛,无论中间是否有比赛。

标签: mysqlsqldatetimewindow-functionsunpivot

解决方案


您可以使用 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

推荐阅读