Mysql 从标有id和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,但查

我已经在这里看到了一个类似的问题,这正是我想要的,除了我需要选择的最小可用数量,不仅仅是从一个表中,而是从具有特定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列中包含附加条件。