有什么方法可以快速计算MAX()?

时间:2019-04-15 10:21:44

标签: mysql

我正在尝试执行以下查询:

SELECT 
    A.*
    , (SELECT MAX(B.Date2) FROM Tab2 B WHERE A.ID = B.ID AND A.Date > B.Date2) AS MaxDate
FROM
    Tab A

这行得通,但是当您有很多行时,它将花费很多时间。有没有更快的方法可以达到相同的结果?

谢谢!

编辑:

表的定义如下:

Tab : (dd-mm-yyyy)
ID | Date
1  | 19-01-2018
1  | 14-01-2018
2  | 18-02-2019
3  | 20-03-2019

Tab2:
ID  | Date2
1   | 10-01-2018
1   | 15-01-2018
1   | 20-01-2018
2   | 15-02-2019
2   | 21-02-2019
3   | 25-03-2019

我希望我的查询返回:

ID  | Date       | MaxDate 
1   | 19-01-2018 | 15-01-2018
1   | 14-01-2018 | 10-01-2018
2   | 18-02-2019 | 15-02-2019
3   | 20-03-2019 | NULL

谢谢!

1 个答案:

答案 0 :(得分:0)

这对我来说是意外的,但是此查询有效:

SELECT
    A.ID
    , A.Date
    , MAX(B.Date2) AS MaxDate
FROM
    Tab A
    left outer join Tab2 B
        on A.ID = B.ID and A.Date > B.Date2
GROUP BY
    A.ID, A.Date
;

我不知道当MAX()的列在另一个表中时,是否可以将表中的列放入组中。