SQL Server 2008 R 2――最小nIndexを検索します。nIndexは存在しますが、nIndex+1は最小連続配列の中の最大値を求めます。
3702 ワード
実はみんなは少し頭を動かします。問題は最小の連続配列の中の最大値を求めて、配列の大きさは1になります。
==========================================================================================================================
芝居のセットを作って、仏を西に送ります。
学習研究を容易にするためには、必ず例示的なコードをフルセットで書く必要があります。
=======================================================================
このコードが使えるかどうかは分かりませんが、先に発表しました。
ネットワークコードはリスクがあります。コピー&ペーストは慎重にしてください。
この2つの文を実行してキャッシュをクリアします。
2051103-01
コードに問題があります。時間があります。
==========================================================================================================================
2051103-02
また試してみましたが、2048以内の欠落検索しか処理できませんでした。これは敏感な数字で、研究しなければなりません。
もちろんプロではないかもしれません。コードに問題があります。
幸いに開発、生産の中で出会った問題ではないです。ゆっくりと分析して問題を探すことができます。
このことのヒントは、「あなた達のこれらの嫌な爬虫類の小さいウェブサイト、間違ったコードはここにあります。私はまだ変えません。」
あなた達の行為は違法です。通知して削除すればいいというわけではありません。
すべての法律が私に与えた権利を保留します。
==========================================================================================================================
芝居のセットを作って、仏を西に送ります。
学習研究を容易にするためには、必ず例示的なコードをフルセットで書く必要があります。
-------------------------------------------------------------------------------------
--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
実行計画を添付します=======================================================================
このコードが使えるかどうかは分かりませんが、先に発表しました。
ネットワークコードはリスクがあります。コピー&ペーストは慎重にしてください。
この2つの文を実行してキャッシュをクリアします。
DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
==========================================================================================================================2051103-01
コードに問題があります。時間があります。
==========================================================================================================================
2051103-02
また試してみましたが、2048以内の欠落検索しか処理できませんでした。これは敏感な数字で、研究しなければなりません。
もちろんプロではないかもしれません。コードに問題があります。
幸いに開発、生産の中で出会った問題ではないです。ゆっくりと分析して問題を探すことができます。
このことのヒントは、「あなた達のこれらの嫌な爬虫類の小さいウェブサイト、間違ったコードはここにあります。私はまだ変えません。」
あなた達の行為は違法です。通知して削除すればいいというわけではありません。
すべての法律が私に与えた権利を保留します。