工具: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
這是最終結果: