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

时间:2015-10-31 15:41:47

标签: mysql sql-order-by

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

问题:

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

执行内部子查询时,我能够获得有序结果,但是当分配行号时,订单会更改。

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

SqlFiddle链接: 请找到相同的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

请帮忙。

1 个答案:

答案 0 :(得分:0)

在您的查询中,我限制为6,因为这是您要求的。如果你需要它可以进一步偏移id,例如,对于id 3到9,例如LIMIT 3,6。我还将rowcount从子查询移到top查询,因为你想要最终产品的行。

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),则可以在此处对此查询执行另一个子选择。