我有一个带有列的表格GameData;我的nba数据库中的GameID,日期,开始时间,持续时间,AteamId,HteamID,Ascore,Hscore,出勤率。它基本上保存有关NBA游戏的数据。我想选择X天休息后为特定球队效力的所有记录。
到目前为止,我在选择记录时遇到了麻烦
select * from GameData where Date+2 in (Select Date from GameData) and ATeamID = 1030;
但这只是为特定团队获取所有日期相隔两天的带有Date值的记录,但它不会检查两者之间是否有记录。只能选择上次玩游戏后两天的游戏,而不是仅仅玩完游戏后两天的游戏,无论中间是否玩过游戏。
答案 0 :(得分:0)
您可以使用union all
取消数据透视表的生成,从而为每个游戏和每个团队生成一行,然后使用lag()
获取“先前”游戏的日期,最后使用该信息进行筛选:< / p>
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