mysql实现窗口函数功能
有时候我们想要得到每个分组的前几条记录,这个时候oracle中row_number函数使用非常方便,可惜MYSQL从8.0版本开始才支持窗口函数。本文介绍一些通过sql实现窗口函数效果的方法。 1.利用用户变量实现数据自增 表flow_task有phaseno(序列号),objectno(编号)等几个字段,我们想实现根据编号字段分组,然后组内根据序列号排序功能 select @rownum:=@rownum+1 rownum,a.objectno,a.phaseno, if(@objno=a.OBJECTNO or (@objno is null and a.objectno is null), @rank:=@rank+1, @rank:=1) as row_number, @objno:=a.OBJECTNO from(SELECT * from flow_task order by OBJECTNO,phaseno asc)a, (select @rownum :=0,@objno:=null,@rank:=0)b 注意:order by OBJECTNO,phaseno asc 分组字段在前,排序字段在后 原理是,先 order by OBJECTNO,phaseno asc,这样后相同编号的记录会在一块儿,并且已经是phaseno有序asc的