Mysql 从标有id和customId的行集合中查找最小未使用值
我已经在这里看到了一个类似的问题,这正是我想要的,除了我需要选择的最小可用数量,不仅仅是从一个表中,而是从具有特定customId的行中。 如果另一个问题被删除或其他问题,则需要以下查询: 对于第[1,2,3]行,查询应返回4 对于第[2,3,4]行,查询应返回1 对于第[1,3,4]行,查询应返回2 如果有多个缺失行[1,2,4,6,7],则查询应返回最小缺失值3 我尝试了第一个链接问题中的解决方案,也尝试了这个链接中的解决方案。我试图调整它们,使之在WHERE子句中包含customId,但查询太高级,让我感到困惑,所以它不起作用。我尝试过这样做:Mysql 从标有id和customId的行集合中查找最小未使用值,mysql,sql,minimum,Mysql,Sql,Minimum,我已经在这里看到了一个类似的问题,这正是我想要的,除了我需要选择的最小可用数量,不仅仅是从一个表中,而是从具有特定customId的行中。 如果另一个问题被删除或其他问题,则需要以下查询: 对于第[1,2,3]行,查询应返回4 对于第[2,3,4]行,查询应返回1 对于第[1,3,4]行,查询应返回2 如果有多个缺失行[1,2,4,6,7],则查询应返回最小缺失值3 我尝试了第一个链接问题中的解决方案,也尝试了这个链接中的解决方案。我试图调整它们,使之在WHERE子句中包含customId,但查
SELECT min(unused) AS unused
FROM (
SELECT MIN(t1.id)+1 as unused
FROM yourTable AS t1
WHERE t1.customId = ? AND NOT EXISTS (SELECT * FROM yourTable AS t2 WHERE t2.customId = ?
AND t2.id = t1.id+1)
UNION
-- Special case for missing the first row
SELECT 1
FROM DUAL
WHERE customId = ? AND NOT EXISTS (SELECT * FROM yourTable WHERE id = 1)
)AS subquery
但它显示访问或语法冲突错误。您可以执行以下操作:
select 1 + min(col)
from t
where not exists (select 1 from t t2 where t2.col = t.col + 1);
如果需要包含1,则:
select (case when min(tt.mincol) <> 1 then 1
else 1 + min(col)
end)
from t cross join
(select min(col) as mincol from t) tt
where not exists (select 1 from t t2 where t2.col = t.col + 1)
我调整了我在网上找到的一个查询,直到它起作用。。。很明显,它不一定很快或性能很好,但它可以工作,所以它是这样的:
SELECT min(unused) AS unused FROM
( SELECT MIN(t1.group_number)+1 as unused FROM units AS t1 WHERE t1.user_id = '.$ai_id.' AND
NOT EXISTS (SELECT * FROM units AS t2 WHERE t2.user_id = '.$ai_id.' AND t2.group_number=
t1.group_number +1) UNION
-- Special case for missing the first row
SELECT 1 FROM DUAL WHERE NOT EXISTS (SELECT * FROM units WHERE group_number= 1
AND user_id = '.$ai_id.') )AS subquery
我不知道它到底是怎么工作的,但不知怎么的,我只能得到它的轮廓。。。
在这种情况下,用户id是前面提到的customId,unit\u group\u number是用于搜索丢失的孔值的列,该孔值将返回为未使用。在示例中customId列在哪里?你没有表现出与前面的问题有什么不同。你说你试图调整其他答案来做你想做的。显示您所尝试的。@barmar在显示示例之前,我描述了customId的角色。我将更新一些我尝试过的例子,需要更多的细节。如果在ID序列中有一个与自定义ID之间的间隙,但它被一个没有该自定义ID的行填充,该怎么办?显示同时包含两列和所需结果的示例数据。替换时没有语法错误?有身份证号码。当查询中有占位符时,必须准备占位符,而不是直接使用占位符。此答案不显示如何在customId列中包含附加条件。