mysql 分组加行号

SELECT
                    case when @v <> _apply.PATIENT_ID then @r :=1 else @r :=@r + 1 end AS row_num_v_,
                    case when @v <> _apply.PATIENT_ID then @v := _apply.PATIENT_ID else @v end AS row_num_v,
                    _apply.ID,
                    _apply.MEDICAL_CARD_NO,
                    _apply.EXPERT_RESOURCE_ID,
                    _apply.PATIENT_ID,
                    _apply.DEPT_ID,
                    _apply.REG_DATE,
                    _apply.COMPANY_ID
                FROM
                    reg_apply _apply,
                    (SELECT @r := 0) b,
                    (SELECT @v := -1) bv
                ORDER BY
                    _apply.PATIENT_ID,
                    _apply.REG_DATE DESC

mysql中没有row_number() over,可以使用曲线救国的方法来解决。

1、我们先按要分组的字段排序。

2、我们定义两个变量一个@r作为行号,@v作为分组号。然后业务表链接这两个字段。

3、case 分组号和当前的要分组的字段比较。

4、上面的两个case的位置不能变,否者就会失效