【问题标题】:Alternative to mysql WHERE IN SELECT GROUP BY when wanting max value in group by当想要分组中的最大值时替代mysql WHERE IN SELECT GROUP BY
【发布时间】:2026-01-23 20:05:03
【问题描述】:

我有以下查询,它是从网上找到的一个提示开发的,因为GROUP BY返回最大值的问题;但它的运行速度非常慢。

在网上查看后,我发现WHERE IN (SELECT.... GROUP BY) 可能是问题所在,但老实说,我正在努力寻找解决此问题的方法:

SELECT *
FROM tbl_berths a
JOIN tbl_active_trains b on a.train_uid=b.train_uid 
WHERE (a.train_id, a.TimeStamp) in (
    SELECT a.train_id, max(a.TimeStamp) 
    FROM a 
    GROUP BY a.train_id
) 

我在想我可能需要一个派生表,但我在这方面的经验为零,只是行不通!

【问题讨论】:

    标签: mysql sql group-by max greatest-n-per-group


    【解决方案1】:

    您可以将其移至 SUBQUERY 并仅选择所需的列而不是全部 (*)

    SELECT a.train_uid
    FROM tbl_berths a
    JOIN tbl_active_trains b on a.train_uid=b.train_uid 
    JOIN  (SELECT a.train_id, max(a.TimeStamp) as TimeStamp
        FROM a 
        GROUP BY a.train_id )T
    on a.train_id = T.train_id
    and a.TimeStamp = T.TimeStamp 
    

    【讨论】:

    • 谢谢,这使它的执行时间快了大约 6-8 倍