一尘不染

GROUP BY具有最大日期

mysql

执行此代码时出现问题:

SELECT * FROM tblpm n 
WHERE date_updated=(SELECT MAX(date_updated) 
FROM tblpm GROUP BY control_number 
HAVING control_number=n.control_number)

基本上,我想返回每个控件号的最新日期。上面的查询返回正确的输出,但需要37秒。在显示输出之前。

是否有任何其他sql子句或命令可以比上述查询执行得更快?

提前致谢。


阅读 511

收藏
2020-05-17

共1个答案

一尘不染

将子查询放在WHERE子句中并将其限制为n.control_number意味着它将多次运行子查询。这称为 相关子查询 ,通常是性能的杀手。

最好在FROM子句中运行一次子查询,以获得每个控件号的最大日期。

SELECT n.* 
FROM tblpm n 
INNER JOIN (
  SELECT control_number, MAX(date_updated) AS date_updated
  FROM tblpm GROUP BY control_number
) AS max USING (control_number, date_updated);
2020-05-17