【发布时间】:2016-05-24 18:38:18
【问题描述】:
我正在尝试从名为 games 的任何给定团队的表中选择具有最后一个 gameDate、今天的 gameDate(如果存在)和下一个 gameDate 的行。其结构如下:
awayTeam homeTeam gameDate
1 2 5/12/16
2 3 5/13/16
3 5 5/14/16
2 4 5/14/16
我面临的问题是 teamID 可以出现在两列中 - awayTeam 或 homeTeam。我看到很多具有 group by 子句的解决方案,但似乎只适用于一列。我想获得与每个团队的最后一场比赛相对应的行。例如,(1,5) 将返回:
awayTeam homeTeam gameDate
1 2 5/12/15
3 5 5/14/16
由于我想要最近的比赛,今天的任何比赛,以及下一场比赛,我想解决这个问题的最佳方法是首先获取过去的行,然后使用今天的行 UNION ALL,然后UNION ALL 与下一场比赛。这张表很小,只有大约 3,000 行。我有以下查询,但它只适用于 homeTeam,如果它出现在 awayTeam 中则无效。此外,下面的查询需要 2.2 秒,对于具有如此少行数的表来说,这似乎高得离谱。
SELECT g . *
FROM games g
WHERE g.gameDate = (
SELECT MAX( g2.gameDate )
FROM games g2
WHERE g2.homeTeam = g.homeTeam
AND gameDate < NOW( )
AND g.homeTeam
IN (1, 5) )
ORDER BY g.gameDate DESC
我考虑过将其拆分为一个视图,这样我就可以轻松地获得一支球队的最后一次比赛时间,无论它们是出现在 homeTeam 还是 awayTeam 列中,但这似乎有点矫枉过正。这是针对 MySQL 的。感谢您的宝贵时间。
【问题讨论】: