mysql 动态 row_number 生成问题

mysql dynamic row_number generation issue

我尝试根据来自网络的引用为 MySQL 创建一个行号。

查询如下

存在一种情况,当审计 ID 不相同时,row_number 变量需要递增 1。否则 row_number 相同[每行递增]。
但是,由于 having; condition{[row_number>3]} 中有引用,row_number 再次递增。

所以,我在结果中得到奇数 row_number。请帮忙。
这意味着下面查询的结果有 5,7,9,etc.,因为 row_number 而不是 4,5,6,etc.,

注意:这里的AUDIT_ID列是大整数。

SELECT  
 @row_number:=CASE WHEN @audit_id = AUDIT_ID then @row_number
    else
@row_number+1 
end AS row_number,
@audit_id:=AUDIT_ID as AUDIT_ID from 
(
SELECT AUDIT_ID from AUDIT where <somecondition>
UNION ALL
SELECT AUDIT_ID from AUDIT where <somecondition>
)
TABLE ,(SELECT @row_number:=0, @audit_id:=0) AS temp 
   having row_number >3

首先,您需要修复 AUDIT_ID 列的顺序,必须对其进行排序才能获得正确的 row_number 为此,我在并集部分添加了 ORDER BY AUDIT_ID 然后您正在使用 having 别名 row_number 的子句它将重新 run/evaluate 针对您的 row_number 定义的表达式(即情况...)别名因此您的 row_number 与您希望过滤掉小于 3 的结果,您需要将整个查询包装在另一个子 select 中,例如 select * from (your query) t1 where some conditon

SELECT *
FROM (
    SELECT  
        @row_number:=CASE WHEN @audit_id = AUDIT_ID
        THEN @row_number
        ELSE @row_number+1 
        END AS row_number,
        @audit_id:=AUDIT_ID AS AUDIT_ID
     FROM (
        SELECT AUDIT_ID FROM AUDIT WHERE <somecondition>
        UNION ALL
        SELECT AUDIT_ID FROM AUDIT WHERE <somecondition>
        ORDER BY AUDIT_ID
        ) t,
       (SELECT @row_number:=0, @audit_id:=0) AS temp 
) t1
WHERE row_number >3