相信看到我這篇文章的朋友一定是遇到了在分組查詢之後 需要的是分組的某行數據,例如根據價格高低,時間先後等等規則排序只取前一條或者若干條。但是會發現往往gooup by order by 之後,結果往往不是按照我們設想的那樣,所以爲了解決這個問題請往下看
這裏我以更新時間爲例,獲取最新的一條數據,詳見下表:
然後根據goods_id進行分組查詢 取分組後最新的一條數據 我們需要的結果是id爲3和id爲2的這2條數據 但是執行後查詢的結果是:
可以看出來 得到的結果是3和1,這顯然不是我們需要的結果,因爲在分組之前數據庫就默認得到了結果,然後我們在去order by就得到不想要的數據,所以我們要做的就是,第1步:使用GROUP_CONCAT函數 他可以設置分組的條件 在這裏我們需要的條件就是時間最新的一條,語法如下:
裏面的id是我只查詢id,然後條件就是時間倒敘,得到的結果就是把分組後的id都查詢出來,但是我們只需要第一條,所以我們需要用到另外一個函數,沒錯!第2步:就是SUBSTRING_INDEX截取函數 具體語法如下:
這樣 我們就得到了根據時間倒敘,分組後最新的數據了,但是隻有id顯然不是我們想要的,所以,最後一步就是經常用的in查詢 把數據全部查詢出來 如下圖:
這樣 我們就把想要的結果查詢出來了 可以使用很多其他的方式來實現,這裏我只分享了自己的這種做法。
如果感覺以上單表的情況無法滿足各位的需求,請參考下我之前發佈的一篇論壇的問題 多表關聯的情況,鏈接如下:
https://bbs.csdn.net/topics/395020641
看了這篇文章還是沒有解決問題的話,可以私信我 歡迎打擾!