關於mysql中一個分類排序的語句問題

 工具:Navicat

  在工作中遇到這個問題,目的很簡單,在一張表中,有一個類型字段,要根據不同的類型取出前幾條數據。問題看似簡單,但寫sql的過程卻不那麼容易了。開始謝了一條很長很複雜的sql語句,雖然功能可以實現,但語句太長影響觀感,而且耗時。所以想辦法優化了一下。這是數據表,取每個stype的牽手那條數據。

這是最終版的sql語句:

SELECT id,title,sunit,path,sdate,stype,rank FROM 
    (SELECT *,@rownum:=@rownum+1 AS rownum,IF(@pa=ff.stype,@rank:=@rank+1,@rank:=1) AS rank,@pa:=ff.stype 
    FROM 
    (SELECT id,title,sunit,path,sdate,stype FROM t_sqxfwcp_log g GROUP BY stype,sdate  ORDER BY stype,sdate DESC) ff,(SELECT @rank:=0,@rownum:=0,@pa=NULL) tt) result
    where rank<=3 order by sdate DESC


這是最終結果:



發佈了22 篇原創文章 · 獲贊 21 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章