• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小连续数组中的最大值

    其实大家稍微动下大脑,问题可以转化为,是求最小连续数组中的最大值,数组大小可以为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以内的缺失查找。这是个敏感的数字,得研究下。

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

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

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

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

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

    您可能感兴趣的文章:
    • sqlserver2008 拆分字符串
    • SQLserver2008使用表达式递归查询
    • 还原sqlserver2008 媒体的簇的结构不正确的解决方法
    • ASP.NET下向SQLServer2008导入文件实例操作方法
    • SQLServer2005与SQLServer2008数据库同步图文教程
    • Win2008中SqlServer2008 无法打开错误日志文件导致无法启动的解决方法
    • 深入SqlServer2008 数据库同步的两种方式(Sql JOB)的分析介绍
    • sqlserver2008锁表语句详解(锁定数据库一个表)
    • sqlserver2008安装报语言不符的解决方法
    • sqlserver2008查看表记录或者修改存储过程出现目录名无效错误解决方法
    • Win2003+apache+PHP+SqlServer2008 配置生产环境
    上一篇:SQL SERVER 2008 64位系统无法导入ACCESS/EXCEL怎么办
    下一篇:图文详解Windows Server2012 R2中安装SQL Server2008
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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