gpt4 book ai didi

mysql - 按日期获取最后记录,但对于 2 个不同的 ID

转载 作者:行者123 更新时间:2023-11-28 23:30:39 25 4
gpt4 key购买 nike

我正在尝试从名为 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 子句的解决方案,但似乎只适用于一列。我想获取与每个团队的最后一个 gameDate 对应的行。例如,(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

我考虑过或许将其拆分为一个 View ,这样我就可以很容易地获得一支球队上次比赛的时间,而不管他们出现在 homeTeam 还是 awayTeam 列中,但这似乎有点过分了。这是针对 MySQL 的。感谢您的宝贵时间。

最佳答案

这不是很漂亮,但它可以帮助你。最内层的派生表将所有团队与他们的日期放在一列中。下一部分获取每支球队上一场比赛的日期。将其加入到原始表格中,现在您将以原始格式返回每支球队的最新最后一场比赛。解释起来很困惑,但如果您从内到外逐一运行每个选择,则真的非常简单。

SQL Fiddle Demo

SELECT yt.*
FROM
(SELECT
Team
, MAX(GameDate) AS GameDate
FROM
(SELECT AwayTeam AS Team, GameDate
FROM YourTable
UNION ALL
SELECT HomeTeam AS Team, GameDate
FROM YourTable) a
WHERE GameDate < NOW()
GROUP BY
Team) MaxDates
JOIN YourTable yt ON (MaxDates.Team = yt.AwayTeam OR MaxDates.Team = yt.HomeTeam)
AND yt.GameDate = MaxDates.GameDate
WHERE MaxDates.team in (1,5)

关于mysql - 按日期获取最后记录,但对于 2 个不同的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com