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

问题描述 投票:0回答: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
mysql
1个回答
0
投票

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

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

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

这项修正案应该有效 -

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;

© www.soinside.com 2019 - 2024. All rights reserved.