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'列上有索引嗎? 那肯定會有所幫助。