問題:
找到更有效的方法來找出檢索MySQL表中每個組別的最後一行,使用類似的查詢至:
select * from foo as a where a.id = (select max(id) from foo where uid = a.uid group by uid) group by uid;
潛在解決方案:
考慮此替代查詢:
SELECT t1.* FROM foo t1 LEFT JOIN foo t2 ON t1.id < t2.id AND t1.uid = t2.uid WHERE t2.id is NULL;
解釋:
此查詢Left將表中的每一行與其後繼基於ID 欄位。如果不存在後繼(即,它是群組中的最後一行),則 t2.id 欄位將為 NULL。透過過濾 NULL,我們有效地隔離了每組的最後一行。
附加說明:
使用 EXPLAIN 分析原始查詢和替代查詢的查詢效能解決方案。
此方法對於大型資料集和複雜分組特別有用。對於更簡單的情況,其他方法可能更有效。
以上是如何有效率地檢索 MySQL 中每組的最後一行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!