程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL2008 >> SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小延續數組中的最大值

SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小延續數組中的最大值

編輯:MSSQL2008

SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小延續數組中的最大值。本站提示廣大學習愛好者:(SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小延續數組中的最大值)文章只能為提供參考,不一定能成為您想要的結果。以下是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以內的缺失查找。這是個敏感的數字,得研討下。

當然也能夠是我不專業,寫的代碼有問題。

幸虧不是我在開發、消費中遇到的問題,還能悠哉悠哉的剖析查找問題。

這件事的啟示是:你們這些討人厭的爬蟲小網站,錯誤代碼就在這裡我還就是不改了。

        你們的行為是守法的,並不是說告訴然後刪除就是可以的。

        我保存一切法律賦予我的權益。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved