mysql group by 之後取每個分組最新的一條(或者按照自定義的規則排序)

       相信看到我這篇文章的朋友一定是遇到了在分組查詢之後 需要的是分組的某行數據,例如根據價格高低,時間先後等等規則排序只取前一條或者若干條。但是會發現往往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

    看了這篇文章還是沒有解決問題的話,可以私信我 歡迎打擾!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章