MySQL: 获取有行号的有序记录

MySQL: Get ordered records with row number

试图在一个查询中获取带有行号的有序结果,但无法获得预期结果。

问题:

我想将行号分配给有序结果(使用 this link 中找到的逻辑在其他零序列号上)

在执行内部子查询时,我能够得到有序的结果,但是当分配行号时,顺序发生了变化。

所以当我执行整个查询时,它没有给出预期的结果。

SQLFiddle Link: 请找到相同的 sql fiddle

预期输出:

rownum  sequenceno

    1   1
    2   2
    3   3
    4   0
    5   0
    6   0

实际输出:

rownum  sequenceno

    1   0
    2   2
    3   0
    4   1
    5   0
    6   3

请帮忙。

在您的查询中,我限制为 6,因为这是您要求的。如果您需要它用于介于两者之间的情况,例如 LIMIT 3,6 用于 id 3 到 9,您可以进一步抵消 id。我还将行计数从子查询移出到顶级查询,因为您需要最终产品的行。

SET @rownum=0;
SELECT rownum, vehDetails.* FROM (
SELECT  @rownum:=@rownum + 1 AS rownum, vehDetails.*
    FROM    (   
            SELECT  
                    vehname
                    ,vehlastupdated
                    , vehicle.sequenceno
            FROM        vehicle 
            INNER JOIN  user ON vehicle.custno = user.custno 
            WHERE       user.userkey = '123456'
            AND         vehicle.custno = 1
            ORDER BY    (CASE WHEN vehicle.sequenceno = 0 THEN 1 ELSE 0 END)
                        ,vehicle.sequenceno ASC

            ) vehDetails
    ) vehDetails
    WHERE vehDetails.rownum BETWEEN 1 AND 6
    ORDER BY    sequenceno = 0,sequenceno  ASC

如果您需要对 rownum 执行更多操作,例如 rownum IN (1,4,10),您可以在此处对此查询执行另一个子选择。