mysql - 获取 MySQL 列中的最小未使用值

标签 mysql sql minimum

我有一个包含整数 ID 列的表。我想获得此列的最小未使用值。查询应该找到表 ID 中的第一个洞并获取其中的最小值。我将尝试用一些例子来解释它。

例一:无孔表

在这种情况下,我有一个没有漏洞的表,查询应该简单地获取最小未使用值:应该获取:4

|id|
|1 |
|2 |
|3 |

示例 2:顶部有孔的 table

在这种情况下,我们在顶部有一个洞(缺失值:1)。查询找到洞并得到里面的最小值:应该得到1。

|id|
|2 |
|3 |
|4 |

同样在这种情况下,我们在顶部有一个洞,但里面有更多缺失值(缺失值:1 和 2)。查询找到洞并得到里面的最小值:应该得到1。

|id|
|3 |
|4 |
|5 |

示例3:中间有孔的 table

在这种情况下,中间有一个洞(缺失值:2 和 3)。查询找到洞并得到里面的最小值:应该得到2。

|id|
|1 |
|4 |
|5 |

示例 4:顶部和中间有孔的 table

在这种情况下,我们有多个孔:一个在顶部(缺失值:1),一个在中间(缺失值:3)。查询找到第一个洞并获取其中的最小值:应该得到 1。

|id|
|2 |
|4 |
|6 |

我已经尝试了 this post 中提出的解决方案,但在我的案例中它没有按预期工作。有什么想法吗?

最佳答案

SELECT min(unused) AS unused
FROM (
    SELECT MIN(t1.id)+1 as unused
    FROM yourTable AS t1
    WHERE NOT EXISTS (SELECT * FROM yourTable AS t2 WHERE t2.id = t1.id+1)
    UNION
    -- Special case for missing the first row
    SELECT 1
    FROM DUAL
    WHERE NOT EXISTS (SELECT * FROM yourTable WHERE id = 1)
) AS subquery

关于mysql - 获取 MySQL 列中的最小未使用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25719690/

相关文章:

带有连接和限制的 Mysql 更新

mysql - 外部连接中的 IF/CASE

c - 寻找一对整数之间的最小差异

octave - 尝试在矩阵中查找最小值的索引在 Octave 中失败

python - scipy.optimize.fim错误: need more than 1 value to unpack

php - 如何通过数据库中的 Bootstrap 创建动态模态窗口?

mysql - 当条件位于不同行和列时的 CASE 语句

MYSQL 查询每周获取新客户

c# - 如何在 C# 中的此 SQL 语句中构建参数化查询或用户转义?

php - 将多个文本文件及其标题导入 MySQL