选择一条记录,因为它的日期字段比另一条记录的日期字段晚 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
我有一个 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