我正在使用在 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 |
出现这个问题是因为您的查询会检查当前行的计数器是否小于前一行的计数器。
不仅在计数器重置时满足此条件,而且在计数器增量较小时也满足此条件(例如由于从数百滚动到数千等)。
要仅识别计数器“重置”的行,您需要添加一个定义“重置”的附加条件。
这项修正案应该有效 -
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;