Mysql学习记录(@row和@prev)

188 阅读1分钟

@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记录后续用来做判断,这里是自定义了一个临时存储的一列的值

————少年的肩上应先挑上草长鹰飞和杨柳莺莺