选择一条记录,因为它的日期字段比另一条记录的日期字段晚 X 天 SQL

Selecting a record because its date field is X days after another records date field SQL

我有一个 table,GameData,有列;我的 nba 数据库中的 GameID、日期、开始时间、持续时间、AteamId、HteamID、Ascore、Hscore、出勤率。它基本上保存了 NBA 比赛的数据。我想 select 特定球队休息 X 天后的所有记录。

我在 select 处理目前为止的记录时遇到了问题 select * from GameData where Date+2 in (Select Date from GameData) and ATeamID = 1030; 但这只是获取特定团队的日期值相隔两天的所有记录,但它不会检查两者之间是否有记录。它应该只 select 上次玩 2 天后的游戏,而不是仅仅 2 天后的游戏,不管中间是否玩过游戏。

您可以使用 union all 反转 table 为每场比赛和球队生成一行,然后使用 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