SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小连续数组中的最大值

所属分类: 数据库 / mssql2008 阅读数: 151
收藏 0 赞 0 分享

其实大家稍微动下大脑,问题可以转化为,是求最小连续数组中的最大值,数组大小可以为1。

=======================================================================

做戏做全套,送佛送到西。

为了便于学习研究,必然是要写全套示例代码的。

-------------------------------------------------------------------------------------
 --by wls
 --非专业SQL 不求高效 但求能跑
 USE tempdb
 GO
 -------------------------------------------------------------------------------------
 IF OBJECT_ID (N't_MaxInMinContinuousArr', N'U') IS NOT NULL
 DROP TABLE t_MaxInMinContinuousArr;
 GO
 CREATE TABLE t_MaxInMinContinuousArr(SNId INTEGER PRIMARY KEY,SomeDate DATETIME)
 GO
 -------------------------------------------------------------------------------------
 DECLARE  @i INT
 SET @i =       --SNId起始值
 DECLARE @TestScale INTEGER
 SET @TestScale=+@i  --数据规模
 DECLARE @t DATETIME ,
     @t DATETIME ,
     @dd INT ,
     @dayadd INT ,
     @tRes DATETIME
 SET @t = '-- ::'
 SET @t = '-- ::'
 SET @dd = DATEDIFF(dd, @t, @t)
 WHILE @i < @TestScale  --数据规模
   BEGIN 
    SET @dayadd = @dd * RAND() 
    SET @tRes = DATEADD(dd, @dayadd, @t) + RAND()  
    INSERT  INTO t_MaxInMinContinuousArr VALUES(@i , @tRes)
    SET @i = @i + 
   END
 GO
 --SELECT TOP * FROM t_MaxInMinContinuousArr
 --GO
 -------------------------------------------------------------------------------------
 --Delete some SNId randomly
 DECLARE @TestScale INTEGER
 SET @TestScale=  --数据规模
 DELETE FROM t_MaxInMinContinuousArr WHERE SNId=--(SELECT abs(checksum(newid()))%@TestScale + )
 DELETE FROM t_MaxInMinContinuousArr WHERE SNId=--(SELECT abs(checksum(newid()))%@TestScale + )
 GO
 --SELECT TOP * FROM t_MaxInMinContinuousArr
 --GO
 -------------------------------------------------------------------------------------
 --now find the SNId that SNId+ is missing.
 WITH TMinAndMaxSNId
 AS(
 SELECT MIN(SNId) AS MinSNId,MAX(SNId) AS MaxSNId FROM t_MaxInMinContinuousArr  --The min and max SNId
 ),
 TContinuousId
 AS
 (
 SELECT number AS SNIdCmped FROM master..spt_values,TMinAndMaxSNId WHERE type='p' AND number >=TMinAndMaxSNId.MinSNId AND number <=TMinAndMaxSNId.MaxSNId
 )
 SELECT MIN(res.SNIdCmped)- FROM
 (
 SELECT  SNIdCmped FROM TContinuousId
 EXCEPT 
 SELECT  SNId FROM t_MaxInMinContinuousArr) AS res 
 GO

  附上执行计划

 =======================================================================

我也不知道这代码能不能用,先发表了后续慢慢改吧。

网络代码有风险 复制粘贴需谨慎

执行这两个语句清缓存。

DBCC FREEPROCCACHE 
GO
DBCC DROPCLEANBUFFERS
GO

=======================================================================

20151103-01

代码有问题 有空改

=======================================================================

20151103-02

又尝试了一下(大概几十次猜范围),发现只能处理2048以内的缺失查找。这是个敏感的数字,得研究下。

当然也可能是我不专业,写的代码有问题。

幸好不是我在开发、生产中遇到的问题,还能悠哉悠哉的分析查找问题。

这件事的启示是:你们这些讨人厌的爬虫小网站,错误代码就在这里我还就是不改了。

        你们的行为是违法的,并不是说通知然后删除就是可以的。

        我保留一切法律赋予我的权利。

更多精彩内容其他人还在看

使用sql server management studio 2008 无法查看数据库,提示 无法为该请求检索数据 错误916解决方法

使用时代互联的海外空间,sql 2008 无限空间大小,开通账户后,使用sql server management studio 2008 连接数据库,可以链接上,但是无法查看自己的数据库,点击数据库后,提示 无法为该请求检索数据 错误916
收藏 0 赞 0 分享

探讨如何配置SQL2008,让其允许C#远程外部连接的方法详解

本篇文章是对如何配置SQL2008,让其允许C#远程外部连接的方法进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

SQL Server 2008 R2数据库镜像部署图文教程

数据库镜像是一种针对数据库高可用性的基于软件的解决方案。其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中
收藏 0 赞 0 分享

sql2008 hql语句翻译过来的分页语句介绍

有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分。 特别对于UNION ALL比较有用
收藏 0 赞 0 分享

sql server 2008数据库无法启动的解决办法(图文教程)

sql server 2008数据库无法启动的解决办法(图文教程),需要的朋友可以参考一下
收藏 0 赞 0 分享

安装SQL Server 2008时 总是不断要求重启电脑的解决办法

本篇文章是对安装SQL Server 2008时,总是不断要求重启电脑的解决办法进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

关于SQL Server 2008 安装提示"重新启动计算机失败"的解决办法

本篇文章是对关于SQL Server 2008 安装提示"重新启动计算机失败"的解决办法进行了详细的分析介绍,需要的朋友参考下
收藏 0 赞 0 分享

SQL Server Native Client下载 SQL Server Native Client安装方法

在安装 SQL Server 2008 或 SQL Server 工具时,将同时安装 Microsoft SQL Server Native Client 10.0。如果计算机上还安装了 SQL Server Native Client 的 SQL Server 2005 版本,
收藏 0 赞 0 分享

sqlserver2008 拆分字符串

数据库 拆分字符串
收藏 0 赞 0 分享

SQL2008中 阻止保存要求重新创建表的更改 的解决方法

当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改
收藏 0 赞 0 分享
查看更多