鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ mysql子查詢的一個(gè)問(wèn)題

mysql子查詢的一個(gè)問(wèn)題

SELECT * FROM devstatus ORDER BY inserttime desc 此查詢獲得的是

clipboard.png

然后把這條語(yǔ)句作為子查詢語(yǔ)句 按ip進(jìn)行分組 代碼如下
SELECT T.ip,T.memorySize,T.memoryFree,T.storageSize,T.storageFree,T.processList,T.processNumber,T.CPULoad,T.insertTime FROM (SELECT * FROM devstatus ORDER BY inserttime desc) AS T GROUP BY T.ip

獲取的數(shù)據(jù)為

clipboard.png

說(shuō)明一下 獲取的不是最新的 這是為啥? 有大牛幫忙解決一下 萬(wàn)分感謝!??!

回答
編輯回答
淚染裳

5.7的吧?sql解析規(guī)則有些優(yōu)化,這樣寫不行了
改成子查詢里面加個(gè)limit 99999或者子查詢?nèi)〕鲎钚聇ime和ip然后跟原表關(guān)聯(lián)查詢
sql我就不寫了

2018年2月4日 06:24
編輯回答
入她眼

from 把子查詢的結(jié)果作為 外邊查詢的條件使用,外邊的查詢沒(méi)有order by?

2018年3月15日 11:42
編輯回答
溫衫

不是最新的話,那是因?yàn)間ruop by的原因,想要最近的話,加一個(gè)order by time asc

2018年6月8日 17:40
編輯回答
神經(jīng)質(zhì)

這和 SQL 的執(zhí)行順序有關(guān),GROUP BY 會(huì)比 ORDER BY 優(yōu)先執(zhí)行,而 GROUP BY 是正序排序的,所以第 2 張截圖里 192.168.0.108 才會(huì)排在 192.168.0.1081 之前,此時(shí)內(nèi)部的 ORDER BY 是不生效的。

SQL 語(yǔ)句可做如下修改:

SELECT  *, max(inserttime) as max_insert_time FROM devstatus
    GROUP BY(ip)
    ORDER BY max_insert_time DESC;

關(guān)于 SQL 執(zhí)行順序的問(wèn)題,可以參考:SQL Select語(yǔ)句完整的執(zhí)行順序

2017年4月23日 03:36