代码之家  ›  专栏  ›  技术社区  ›  TheCodeGladiator

mysql动态行号生成问题

  •  1
  • TheCodeGladiator  · 技术社区  · 9 年前

    我尝试根据web上的引用为MySQL创建行号。

    查询如下。

    当审核id与 row_number 变量需要增加1。否则 行_编号 相同[每行递增]。
    但是,由于在 having; condition{[row_number>3]} 这个 行_编号 再次递增。

    所以,我得到的是奇数 行_编号 结果。请帮忙。
    这意味着以下查询的结果具有 5,7,9, 等等,如 行_编号 而不是 4,5,6,

    注意:这里是 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
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   M Khalid Junaid    9 年前

    首先,您需要确定 AUDIT_ID 列,必须对它们进行排序,以便正确 row_number 为此,我添加了 ORDER BY AUDIT_ID 在联合部分,那么您正在使用 having 别名子句 行_编号 它将根据您的 行_编号 (即case when…)别名 行_编号 与过滤出小于3的结果的预期结果不同,您需要将整个查询包装在另一个子选择中,如 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