隣接するレコードをネイティブSQLのシーケンスの不足レコードに戻す必要があります。シーケンス内の最初のエントリがない場合は、次のエントリのみを返します。シーケンス内に欠けている部分を探す必要はありません。 " - " は、配列を決定した後BatchIdでレコードが見つからずに隣接するレコードを返すSQL
BatchId(nvarchar(50), null)
CreateDate(datetime, null)
UserId(varchar(50), null)
Batch(varchar(50), null)
最後の数字:
これは、SQL Server 12.0.2000.8
問題の列の構造で実行されています。 BatchIdはバッチと相関します。バッチがBatchIdのシーケンスが1
BatchId CreateDate UserId Batch
#########################################################
9K182855 - 1 2017-09-26 17:57:20.977 9K182855 8
9K182855 - 2 2017-09-26 18:20:57.693 9K182855 8
9K182855 - 1 2017-09-27 11:04:46.177 9K182855 9
9K182855 - 2 2017-09-27 11:19:32.990 9K182855 9
クエリにリセットする必要があります変更された場合、私のデータ
select BatchID, CreateDate, UserId, Batch from Results
where CreateDate > dateadd(day,-2,getdate())
and Batch between 0 and 9
order by UserId, CreateDate, Batch;
これはGOODデータ
BatchId CreateDate UserId Batch
#########################################################
4L182855 - 1 2017-09-28 14:04:46.177 4L182855 9
4L182855 - 2 2017-09-28 15:19:32.990 4L182855 9
4L182855 - 3 2017-09-28 16:30:27.953 4L182855 9
4L182855 - 4 2017-09-28 17:57:20.977 4L182855 9
4L182855 - 5 2017-09-28 18:20:57.693 4L182855 9
4L182855 - 1 2017-09-29 11:04:46.177 4L182855 0
4L182855 - 2 2017-09-29 11:19:32.990 4L182855 0
4L182855 - 3 2017-09-29 11:30:27.953 4L182855 0
4L182855 - 4 2017-09-29 11:57:20.977 4L182855 0
4L182855 - 5 2017-09-29 12:00:57.693 4L182855 0
4L182855 - 6 2017-09-29 12:04:46.177 4L182855 0
4L182855 - 7 2017-09-29 12:19:32.990 4L182855 0
4L182855 - 8 2017-09-29 12:30:27.953 4L182855 0
4L182855 - 9 2017-09-29 13:57:20.977 4L182855 0
4L182855 - 10 2017-09-29 14:20:57.693 4L182855 0
これはあるあるを取得するために使用していますMISSINGデータ
BatchId CreateDate UserId Batch
#########################################################
4L182855 - 1 2017-09-28 14:04:46.177 4L182855 9
4L182855 - 2 2017-09-28 15:19:32.990 4L182855 9
4L182855 - 4 2017-09-28 17:57:20.977 4L182855 9
4L182855 - 5 2017-09-28 18:20:57.693 4L182855 9
4L182855 - 1 2017-09-29 11:04:46.177 4L182855 0
4L182855 - 2 2017-09-29 11:19:32.990 4L182855 0
4L182855 - 3 2017-09-29 11:30:27.953 4L182855 0
4L182855 - 4 2017-09-29 11:57:20.977 4L182855 0
4L182855 - 5 2017-09-29 12:00:57.693 4L182855 0
4L182855 - 6 2017-09-29 12:04:46.177 4L182855 0
4L182855 - 7 2017-09-29 12:19:32.990 4L182855 0
4L182855 - 8 2017-09-29 12:30:27.953 4L182855 0
4L182855 - 10 2017-09-29 14:20:57.693 4L182855 0
要件は、以下の行を返すことで、彼らは私がPythonでまたは可能性CLRユーザー定義関数を経由してこれを行うことが欠落しているレコードの
BatchId CreateDate UserId Batch
#########################################################
4L182855 - 2 2017-09-28 15:19:32.990 4L182855 9
4L182855 - 4 2017-09-28 17:57:20.977 4L182855 9
4L182855 - 8 2017-09-29 12:30:27.953 4L182855 0
4L182855 - 10 2017-09-29 14:20:57.693 4L182855 0
に隣接しています。しかし、私はネイティブSQLで可能かどうかはわかりません。もしそうなら、私に教えてください。
行が欠落しているかどうかは「バッチID」によって決まりますか? – SqlZim
バッチの最初の行が見つからない場合の対処方法を教えてください。バッチの最後の行が見つからない場合を特定できますか? –
はい、sir、 " - "の後のバッチIDの最後の数字です。バッチIDは常にバッチと相関する必要があります。バッチが9から0に変わると、BatchIdのカウンタは1にリセットされます。ユーザーIDは異なる場合があります。私はあなたのコメントを反映するために質問を変更します。ありがとうございました – rreeves