MySQL获取最新记录检查两列

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

我有这样的结果

MySQL: Select top n max values?

我需要获取每个骑师的最新比赛(首先获取比赛的最大日期,然后获取最大比赛编号)。结果应该如下所示:

SQL select only rows with max value on a column [duplicate]

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

最佳答案

当您说“最大比赛号码”时,您是指最近一场比赛的号码(日期最近的比赛),还是最高的号码?

假设您指的是前者,并为您的 table 命名为“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

这个查询越来越长,所以我可能有错误,但它应该大致正确。 ;)

基本上,您需要对表进行聚合查询来查找日期,然后再进行另一个聚合查询以获取该日期的最大费率,最后通过表本身来获取信息。然后您需要使用子查询或联接将它们放在一起,联接通常要快得多,所以我就这样做了。

关于MySQL获取最新记录检查两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344051/

相关文章:

mysql - 查询以获取客户进行的平均交易次数

php - 查询在给定的纬度/经度内查找地点

database - oracle中的sequence.nextval似乎增加了两次

android - 解决未决数据更改的理想方法(何时保存更改)?

mongodb - 在 MongoDB 中,一个大的 $​​or 搜索是否比多个单个搜索更快?

mysql仅授予对一个表及其某些列的选择权限

php - 如何使我的三表 sql 连接工作?

r - 根据 R 中现有列中的组创建新列

performance - 定义所有新语法是否会影响 Scheme、Racket 的性能?

来自相机的 Python OpenCV 流 - 多线程,时间戳