MySQL获取最新记录检查两列

时间:2018-01-19 15:08:05

标签: mysql database performance greatest-n-per-group

我有这样的结果

enter image description here

我需要获得每位骑师的最新比赛(首先获得比赛的最大日期,然后是最大比赛号码)。结果看起来应该是这样的:

enter image description here

注意:数据库非常庞大。查询应该非常快。

2 个答案:

答案 0 :(得分:2)

当你说"最大比赛号码"时,你的意思是最近一场比赛的数量(最近一次比赛的比赛),还是最高的数字?

假设你的意思是前者,并且组成名称' Races'为你的桌子:

SELECT 
    Race.*
FROM 
    (
        SELECT Jockey, MAX(Date) as MaxDate 
        FROM Races GROUP BY Jockey
    ) MaxRaceDate 
    inner join (
        SELECT Jockey, Date, MAX(Race) as MaxRace
        FROM Races 
        GROUP BY Jockey, Date
    ) MaxRaceForDate 
        on MaxRateDate.Jockey = MaxRaceForDate.Jockey
            and MaxRateDate.MaxDate = MaxRaceForDate.Date
    inner join Race
        on Race.Jockey=MaxRace.Jockey 
            and Race.Date = MaxRace.MaxDate
            and Race.Race = MaxRaceForDate.MaxRace

此查询越来越长,因此我可能会收到错误,但它应该大致正确。 ;)

基本上,您需要在表上查找聚合查询以查找日期,然后需要另一个聚合查询以获取日期的最大速率,然后最终获取表本身以获取信息。然后你需要将它们与子查询或连接组合在一起,并且连接通常要快得多,所以我就是这样。

答案 1 :(得分:1)

我相信,你在寻找:

SELECT Jockey,MAX(DATE),MAX(RACE) FROM myTable  GROUP BY Jockey