@row用于临时记录一列的值不改变数据内容,一般用于比较数据使用
@prev用于临时记录查询用来记录前一行的值,用于比较当前和前一行的值
需求:查找一个表中group by后出现连续相同字段的数据
SELECT group_field, value FROM (
SELECT group_field, value,
CASE
WHEN @prev_group = group_field THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS row_number,
@prev_group := group_field
FROM my_table, (
SELECT @rownum := 0, @prev_group := NULL
) AS init
ORDER BY group_field
) AS temp
WHERE row_number > 1;
( SELECT @rownum := 0, @prev_group := NULL ) AS init定义初始的值都是0或者为null
@prev_group := group_field使用 @prev_group自定义的来记录上一行的内容
CASE WHEN @prev_group = group_field THEN @rownum := @rownum + 1 ELSE @rownum := 1 END AS row_number,比较上一行和这一行的数据如果相等则+1记录后续用来做判断,这里是自定义了一个临时存储的一列的值
————少年的肩上应先挑上草长鹰飞和杨柳莺莺