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的位置不能变,否者就会失效

05-26 08:19