mysql 列中的最低可用值

Posted

技术标签:

【中文标题】mysql 列中的最低可用值【英文标题】:Lowest free value in mysql column 【发布时间】:2014-12-18 17:36:08 【问题描述】:

我已经搜索过了,但我总是找到 LEAST 和 GREATEST 作为提示。我想在未使用的行中有下一个升序数字。像下面这样:

entries
1
2
3
5
6
7

如果每个数字都代表我表中的一行,我想要数字 4 作为结果,在以下示例中:

1
2
3
4
5
6

我想要数字 7 作为结果。是否有可能在 SQL 语句中完成此操作?

最好, 罗宾

【问题讨论】:

想象一下,您有出售的物品,每件物品都有一个编号。你卖的第一个得到数字 1,第二个得到数字 2。现在有人买了 3,现在数字被退回。由于某些原因,现在 2 号再次免费,也需要出售。这有点困难,但在这种情况下,我需要这个。当然我也可以用php来完成,不过我想可能mysql也有解决办法。 但是谁在乎它是 4 号还是 7 号呢?谁在乎是否有差距?而且,如果没有怎么办。 1 不见了?这类问题通常表明对数据完整性的重要性存在深刻的误解。 此任务不需要使用数据库 您只是在寻找一些智能自动增量吗? 【参考方案1】:

此查询假定数字 1 在您的表中

select min(number) + 1 from entries e1
where not exists (
    select 1 from entries e2
    where e2.number = e1.number + 1
)

如果您想要所有缺失的数字(间距不大于 1)而不是最小的数字,请删除 min()

【讨论】:

"如果你想要所有缺失的数字 [其中间隙不大于 1]..." 我想你可以这样看 ;-)【参考方案2】:

它认为解决方案是与下一个值进行自连接,并提取第一个最低的结果。示例:

表:values,列value

SELECT v1.value
FROM values v1
LEFT JOIN values v2 ON v1.value = (v2.value + 1)
WHERE v2.value IS NULL
ORDER BY v1.value ASC
LIMIT 1

【讨论】:

以上是关于mysql 列中的最低可用值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用对象元素可用的最低可能序列更新数组中的对象元素?

查询云服务商可用区地域分布及 ping 值延迟

如何比较熊猫数据框列中可用的十进制数?

SQL MIN() 函数

SQL MIN() 函数

SQL语法怎么取得一个字段的最大值