由于mysql没有分组排序功能,因此只能自己写一个:
首先创建表jobTable:如下图
需求是需要根据fltDate分组后,获取每组里面CheckCount排名前3的记录。语句如下
SELECT Account,fltDate,CheckCount,ranks
FROM
(SELECT b.Account,b.fltDate,b.CheckCount, @rownum:=@rownum+1,
IF(@fde=b.fltDate,@rank:=@rank+1,@rank:=1) ranks, @fde:=b.fltDate
FROM jobTable b,
(SELECT @rownum :=0, @fde := null,@rank:=0) c
ORDER BY b.fltDate DESC,b.CheckCount DESC
) result
HAVING ranks <=3
注意里面的IF 后面的别名一定不能为rank,会跟变量冲突。
最终结果为: