Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按日期获取最后记录,但针对2个不同的ID_Mysql_Sql - Fatal编程技术网

Mysql 按日期获取最后记录,但针对2个不同的ID

Mysql 按日期获取最后记录,但针对2个不同的ID,mysql,sql,Mysql,Sql,我试图从一个名为games的表格中为任何给定的团队选择包含最后一个gameDate、todays 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可以出现在两列中

我试图从一个名为games的表格中为任何给定的团队选择包含最后一个gameDate、todays 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。我看到了很多包含GROUPBY子句的解决方案,但这似乎只适用于一列。我想得到对应于每个队最后一次比赛日期的行。例如,1,5将返回:

awayTeam  homeTeam  gameDate
   1          2     5/12/15
   3          5     5/14/16
因为我想要最新的游戏,从今天开始的任何游戏,以及下一个游戏,所以我想解决这个问题的最好方法是首先获取过去的行,然后从今天开始将所有行合并,然后将所有行合并到下一个游戏。这张桌子很小,只有大约3000行。我有下面的查询,但它只适用于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 

我想也许可以把它分成一个视图,这样我就可以很容易地得到一支球队最后一次比赛的情况,不管他们是出现在主队还是awayTeam专栏,但这似乎有些过分了。这是MySQL的。谢谢您的时间。

这并不漂亮,但可能会对您有所帮助。最内部的派生表将所有团队的日期放在一列中。下一部分是每支球队最后一场比赛的日期。将其加入到原始表格中,现在您可以以原始格式返回每个团队最近的最后一场比赛。解释起来很混乱,但如果您从内部到外部逐个运行每个选择,则非常简单


我认为你的解决方案更接近,但它并不完全正确。如果您通过在表值1、4中添加另一行INSERT来更改SQL Fiddle演示,“2016-05-15”;您可以看到它返回3行。我认为您的解决方案之所以有效,是因为在我提供的示例中,1和5只出现一次。@JustinPfenning我修改了答案,并为联接添加了另一个条件。我原来忘记参加约会了。
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)