=================================版权声明=================================

版权声明:原创文章 谢绝转载 

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

勿用于学术性引用。

勿用于商业出版、商业印刷、商业引用以及其他商业用途。                

本文不定期修正完善。

本文链接:http://www.cnblogs.com/wlsandwho/p/4930415.html

耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html

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

代码有问题 请勿使用 本文保持发布可访问状态仅为博主自己管理方便

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

作为一只C++,每天回答SQL Server的问题感觉压力还是蛮大的。

略微(大概一分钟)仔细分析一下,就会发现,问题可以转化为:

求最小连续数组中的最大值,数组大小可以为1。

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

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

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

  1. -------------------------------------------------------------------------------------
  2. --by wls
  3. --非专业SQL 不求高效 但求能跑
  4. USE tempdb
  5. GO
  6.  
  7. -------------------------------------------------------------------------------------
  8. IF OBJECT_ID (N't_MaxInMinContinuousArr', N'U') IS NOT NULL
  9. DROP TABLE t_MaxInMinContinuousArr;
  10. GO
  11.  
  12. CREATE TABLE t_MaxInMinContinuousArr(SNId INTEGER PRIMARY KEY,SomeDate DATETIME)
  13. GO
  14.  
  15. -------------------------------------------------------------------------------------
  16. DECLARE @i INT
  17. SET @i = 666 --SNId起始值
  18.  
  19. DECLARE @TestScale INTEGER
  20. SET @TestScale=500000+@i --数据规模
  21.  
  22. DECLARE @t1 DATETIME ,
  23. @t2 DATETIME ,
  24. @dd0 INT ,
  25. @dayadd INT ,
  26. @tRes DATETIME
  27.  
  28. SET @t1 = '2010-01-01 00:00:00'
  29. SET @t2 = '2025-12-31 00:00:00'
  30. SET @dd0 = DATEDIFF(dd, @t1, @t2)
  31.  
  32. WHILE @i < @TestScale --数据规模
  33. BEGIN
  34. SET @dayadd = @dd0 * RAND()
  35. SET @tRes = DATEADD(dd, @dayadd, @t1) + RAND()
  36.  
  37. INSERT INTO t_MaxInMinContinuousArr VALUES(@i , @tRes)
  38.  
  39. SET @i = @i + 1
  40. END
  41. GO
  42.  
  43. --SELECT TOP 100 * FROM t_MaxInMinContinuousArr
  44. --GO
  45.  
  46. -------------------------------------------------------------------------------------
  47. --Delete some SNId randomly
  48. DECLARE @TestScale INTEGER
  49. SET @TestScale=500000 --数据规模
  50. DELETE FROM t_MaxInMinContinuousArr WHERE SNId=678--(SELECT abs(checksum(newid()))%@TestScale + 1)
  51. DELETE FROM t_MaxInMinContinuousArr WHERE SNId=667--(SELECT abs(checksum(newid()))%@TestScale + 1)
  52.  
  53. GO
  54.  
  55. --SELECT TOP 100 * FROM t_MaxInMinContinuousArr
  56. --GO
  57.  
  58. -------------------------------------------------------------------------------------
  59. --now find the SNId that SNId+1 is missing.
  60. WITH TMinAndMaxSNId
  61. AS(
  62. SELECT MIN(SNId) AS MinSNId,MAX(SNId) AS MaxSNId FROM t_MaxInMinContinuousArr --The min and max SNId
  63. ),
  64. TContinuousId
  65. AS
  66. (
  67. SELECT number AS SNIdCmped FROM master..spt_values,TMinAndMaxSNId WHERE type='p' AND number >=TMinAndMaxSNId.MinSNId AND number <=TMinAndMaxSNId.MaxSNId
  68. )
  69. SELECT MIN(res.SNIdCmped)-1 FROM
  70. (
  71. SELECT SNIdCmped FROM TContinuousId
  72. EXCEPT
  73. SELECT SNId FROM t_MaxInMinContinuousArr) AS res
  74. GO

附上执行计划

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

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

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

执行这两个语句清缓存。

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO

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

20151103-01

代码有问题 有空改

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

20151103-02

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

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

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

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

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

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

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

  1. 安装 SQL Server 2008 R2 的硬件和软件要求(转)

    以下各部分列出了安装和运行 SQL Server 2008 R2 的最低硬件和软件要求.有关 SharePoint 集成模式下的 Analysis Services 的要求的详细信息,请参阅硬件和软件 ...

  2. 更改计算机名称后 导致 sql server 2008 R2 用windows账户不能附加的错误解决办法

    出错背景:本人想用sql server 2008 R2 附加sql server 2005数据库出现拒绝访问,后查询网站得知,要用windows身份验证方式登录进去附加, 然后我就用windows身份 ...

  3. SQL Server 2008 R2数据库镜像部署

    概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在 ...

  4. SQL Server 2008 R2 跟踪标志

    原文:SQL Server 2008 R2 跟踪标志 跟踪标志用于临时设置特定服务器的特征或关闭特定行为.例如,如果启动 SQL Server 的一个实例时设置了跟踪标志 3205,将禁用磁带机的硬件 ...

  5. SQL Server 2008 R2 安全性专题(一):安全原则

    原文:SQL Server 2008 R2 安全性专题(一):安全原则 本系列主要专注与SQL Server 2005以后的DBMS,由于本人工作使用2008 R2,所以目前就针对2008 R2来做说 ...

  6. SQL Server 2008 R2 性能计数器详细列表(四)

    原文:SQL Server 2008 R2 性能计数器详细列表(四) SQL Server Latches 对象: 监视称为闩锁的内部 SQL Server 资源锁.通过监视闩锁来确定用户活动和资源使 ...

  7. SQL Server 2008 R2 性能计数器详细列表(二)

    原文:SQL Server 2008 R2 性能计数器详细列表(二) SQL Server Buffer Partition 对象: 提供计数器来监视 SQL Server 如何使用可用页 SQL S ...

  8. SQL Server 2008 R2 性能计数器详细列表(一)

    原文:SQL Server 2008 R2 性能计数器详细列表(一) SQL Server Backup Device 计数器: 可监视用于备份和还原操作的 Microsoft SQL Server ...

  9. .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”

    一.  问题说明 最近.Net EF core 程序部署到服务器,服务器数据库安装的是SQL server 2008 R2,我本地用的的是SQL server 2014,在用到分页查询时报错如下: H ...

随机推荐

  1. Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

    上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...

  2. jsonp协议原理深度解析

    前言 今天在开发联调的过程中,需要跨域的获取数据,因为使用的jquery,当然使用dataType:'jsonp'就能够很easy的解决了.但是因为当时后端没有支持jsonp来访问,后来他在实现这个功 ...

  3. 【UWP开发】一个简单的Toast实现

    Toast简介 在安卓里Toast是内置原生支持,它是Android中用来显示显示信息的一种机制.它主要用于向用户显示提示消息,没有焦点,显示的时间有限,过一定的时间就会自动消失.在UWP中虽然没有原 ...

  4. 如何从线程返回信息——轮询、回调、Callable

    考虑有这样一个LiftOff类: /** * 类LiftOff.java的实现描述:显示发射之前的倒计时 * * @author wql 2016年9月21日 下午1:46:46 */ public ...

  5. Vue.js先入个门看看

    使用vue.js原文介绍:Vue.js是一个构建数据驱动的web界面库.Vue.js的目标是通过尽可能简单的API实现响应式数据绑定和组合的视图组件.vue.js上手非常简单,先看看几个例子: 例一: ...

  6. C#+ArcEngine10.0+SP5实现鼠标移动动态显示要素属性信息

    为了解决鼠标移过动态显示要素属性的问题,我在网上先是查到的只能显示单个要素的属性,就是直接在arcmap中设置好的那个tips就可以显示,但是这种显示效果只是简单的实现了显示要素的属性值,可是没有对该 ...

  7. EC笔记,第二部分:7.为多态基类声明虚析构函数

    7.为多态基类声明虚析构函数 1.为多态基类声明虚析构函数 code1: class A{ public: int* a; A():a(new int(5)) {} ~A(){ delete a; } ...

  8. 学习笔记:Asp.Net MVC更新部分页面

    Asp.Net MVC 更新部分页面 设想我们有一篇文章下面的提交评论时如何只刷新评论内容部分, 方法一,利用ajax通过js代码实现. 方法二,利用Ajax.BeginForm()+部分视图实现. ...

  9. 利用CSS3实现图片无间断轮播图的实现思路

    前言:图片轮播效果现在在各大网站都是非常普遍的,以前我们都是通过postion的left or right来控制dom的移动,这里我要说的是利用css3来制作轮播!相比以前通过postion来移动do ...

  10. 在Autodesk应用程序商店发布基于浏览器的Web应用程序

    你一定已经听说过Autodesk应用程序商店了,通过Autodesk应用程序商店,你可以免费下载或购买来自全球的优秀开发者发布的应用程序,来帮助你更快更方便的完成你的工作.而且作为开发者,您也可以在A ...