首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找整型值列中的间隙

查找整型值列中的间隙
EN

Stack Overflow用户
提问于 2014-02-05 20:57:20
回答 4查看 73关注 0票数 0

您好,在我的2008 SQL Server中,我有一个包含int值的列sitting,如下所示

0,1,2,4,5我想要3

1,2,3,5,6,7,8我想要0

0,1,2,3,6,7,8我想要4

0,1,2,3,4,5,6,7,8我想要9

我在这里要实现的是找到给定数字之间的gap。我试着遵循对我来说运行良好的代码,但我认为它是相当硬编码的,所以我想知道是否有更简单的方法来实现它,例如SQL query

该列必须始终以0开头,因此当没有找到结果时,我需要将0放在第一位。

如果没有间隙,我只需要继续并添加最大值+1。

代码语言:javascript
运行
复制
object resultSeat = "";
string querySeat = "SELECT ID_K FROM klient WHERE sitting=@sitting AND (event=@event";
for (int a = 0; a < ConnectedEvents.Count(); a++)
{
    querySeat += " OR event='" + ConnectedEvents[a] + "'";
}
querySeat += ")";
for (int i = 0; i <= resultKlimax; i++)
{

   SqlCommand comQuerySeat = new SqlCommand(querySeat,conn);
   comQuerySeat.Parameters.AddWithValue("@sitting",i);
   comQuerySeat.Parameters.AddWithValue("@event", zevent.Text);

   conn.Open();
   resultSeat = comQuerySeat.ExecuteScalar();
   conn.Close();

   if ((resultSeat == null) || (resultSeat == DBNull.Value)) 
         break;

      txt_sitting.Text = (i+1).ToString();
    }

}
if (txt_sitting.Text == "") txt_sitting.Text = "0";

谢谢您抽时间见我。

EN

Stack Overflow用户

发布于 2014-02-05 21:04:10

如果您使用的是SQL Server2012,只需使用lag()函数查找间隔后的下一条记录:

代码语言:javascript
运行
复制
select s.intcol
from (select s.intcol, lag(intcol) over (order by intcol) as prevval
      from sitting s
     ) s
where prevval <> intcol - 1;

您可以对相关子查询执行相同的操作。

编辑:

要获得4,请改用lead()并添加1:

代码语言:javascript
运行
复制
select s.intcol + 1
from (select s.intcol, lead(intcol) over (order by intcol) as nextval
      from sitting s
     ) s
where nextval <> s.intcol + 1;

要使用相关子查询执行此操作,请执行以下操作:

代码语言:javascript
运行
复制
select s.intcol + 1
from (select s.intcol,
             (select top 1 s2.intcol
              from sitting s2
              where s2.intcol > s.intcol
              order by s2.intcol
             ) as nextval
      from sitting s
     ) s
where nextval <> s.intcol + 1;
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21577963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档