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

MySQL以前的结果查询返回不正确的值

  •  -1
  • ColinM  · 技术社区  · 1 年前

    当生产计数器在轮班开始时重置时,我使用在Stack Overflow上找到的查询返回表中的一行。然而,当生产计数器从数百变为数千、从数千变为数万等时,它也会返回行。

    因此,如果我的计数器值如下:

    ndx 柜台
    1. 700000
    2. 252
    3. 2178
    4. 4101
    5. 6027
    6. 7953
    7. 9876
    8. 11769
    9 13695
    10 15618

    我使用的查询是:

    SELECT results.* FROM table AS results WHERE
    results.counter < (
        SELECT prevs.counter FROM table as prevs WHERE
            (prevs.ndx = results.ndx - 1)
    )
    

    我期待着回来:

    ndx 柜台
    2. 252

    但查询返回以下内容:

    ndx 柜台
    2. 252
    3. 2178
    8. 11769
    1 回复  |  直到 1 年前
        1
  •  -1
  •   Raj    1 年前

    问题的出现是因为您的查询检查当前行的计数器是否小于前一行的计数器。

    不仅当计数器重置时,而且当计数器增量较小时(如从数百滚动到数千等),都满足此条件。

    要仅识别计数器“重置”的行,您需要添加一个定义“重置”(reset)的附加条件

    这些修正案应该奏效-

    SELECT results.* 
    FROM table AS results 
    WHERE 
        results.counter < (
            SELECT prevs.counter 
            FROM table AS prevs 
            WHERE prevs.ndx = results.ndx - 1
        )
        AND results.counter < 1000;