mysql - GROUP BY具有MAX日期




optimization greatest-n-per-group (3)

使用HAVING快速簡便:

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

HAVING的上下文中, MAX找到每個組的最大值。 只有每組中的最新條目才能滿足date_updated=max(date_updated) 。 如果組內有最新的HAVING ,則兩者都將通過HAVING過濾器,但GROUP BY表示返回的表中只會出現一個。

執行此代碼時遇到問題:

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子句或命令可以比上面的查詢執行得更快?

提前致謝。


另一種不使用group by的方法:

SELECT * FROM tblpm n 
  WHERE date_updated=(SELECT date_updated FROM tblpm n 
                        ORDER BY date_updated desc LIMIT 1)

沒有必要在子查詢中進行分組...... where子句就足夠了:

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

另外,'date_updated'列上有索引嗎? 那肯定會有所幫助。







greatest-n-per-group