最近遇到個(gè)需求,需要先根據(jù)A條件進(jìn)行分組,然后查詢(xún)出每組數(shù)據(jù)中時(shí)間最近的一條數(shù)據(jù),立馬就寫(xiě)出了sql語(yǔ)句
select * from (select * from b_equipment_maintenance where
equipment_id in (.......)
ORDER BY create_time desc ) a GROUP BY a.equipment_id
但是執(zhí)行了一下,發(fā)現(xiàn)不對(duì),子查詢(xún)中 order by 貌似失效了,查出來(lái)的數(shù)據(jù)并不是要想要的時(shí)間最近的數(shù)據(jù)。
經(jīng)過(guò)我的研究,發(fā)現(xiàn),想要子查詢(xún)中使用order by生效,必須滿(mǎn)足三個(gè)條件:
1、外部查詢(xún)禁止分組或者聚合
2、外部查詢(xún)未指定having,HAVING, order by
3、外部查詢(xún)將派生表或者視圖作為from句中唯一指定源
不滿(mǎn)足這三個(gè)條件,order by就會(huì)失效。
一旦外部表使用了group by,那么子查詢(xún)將不會(huì)執(zhí)行filesort操作(即order by 會(huì)失效)
那么,如何避免子查詢(xún)order by 失效呢
解決辦法是在子查詢(xún)中使用distinct 來(lái)使order by生效
弄明白這些,sql語(yǔ)句就可以?xún)?yōu)化了文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-837381.html
select * from (select DISTINCT(b.id) bid,b.* from b_equipment_maintenance b where
b.equipment_id in (.......)
ORDER BY b.create_time desc ) a GROUP BY a.equipment_id
這樣,就可以查詢(xún)出每組數(shù)據(jù)中時(shí)間最近的數(shù)據(jù)了文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-837381.html
到了這里,關(guān)于MySQL如何查詢(xún)根據(jù)某一條件分組,再查詢(xún)出每組數(shù)據(jù)中時(shí)間最早或最晚的數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!