假设我有下表:
id name base index
0 A 2 0
1 B 2 2
2 C 2 4
3 D 2 6
4 E 2 8
5 F 2 10
因此,index = base * i,其中 i 是该行在序列中的位置。
有时会删除一些行,例如,如果我删除名为 C 和 D 的行:
id name base index
0 A 2 0
1 B 2 2
4 E 2 8
5 F 2 10
新行总是在最后一行之后添加,因此在这种情况下,下一行将是 MAX(index)+base=12,但是由于删除的行,索引列中的值之间留下的间隙会在一段时间后成为问题。如果不是最后插入而是将其插入第一个可用间隙,则不会发生问题。
所以,我怀疑找到第一个可用间隙的任何查询都会像 MAX(index) 一样有效,但最有效的解决方案是什么?也许已经足够好了。
如果不清楚,我需要找到第一行'a',使得具有最接近上索引值的行大于a.index + a.base。
这适用于对任何 SQL 数据库使用 ORM 的应用程序,因此它必须是严格的标准 SQL。
编辑
这是对真实表和真实问题的简化,我正在寻找仅使用基列和索引列的解决方案。涉及在其他表中添加新列或索引的解决方案对我的应用程序不实用。
编辑 2
似乎基列使它变得更加复杂,但这不是必需的。问题可以简化为如下表:
id name index
0 A 0
1 B 1
4 E 4
5 F 5
我需要在哪里找到第一行'a',使得索引最低的行高于a.index + x。在这种情况下 x = 1。
枚举而不先排序或利用 id 不是可靠的解决方案,因为这些可能会改变。例如,如果行也是这样的,则解决方案必须起作用:
id name index
0 A 0
23 F 5
45 E 4
90 B 1