データと必要な出力を表示します。SQL Serverのテーブルでn個の連続した値を検索する方法(regStatus = 0の場合)3を指定した場合、3つの連続するレコードを返す必要があるとします。
上記のコマンドの出力は、このkeyId peopleId sesnId sesName sesOrder **regStatus**
1 169199 166 1 Mar, 2016 1 0
2 169199 167 2 Mar, 2016 2 1
3 169199 168 3 Mar, 2016 3 1
4 169199 169 4 Mar, 2016 4 0
5 169199 170 5 Mar, 2016 5 0
6 169199 231 6 Mar, 2016 6 0
7 169199 232 7 Mar, 2016 7 0
8 297067 166 1 Mar, 2016 1 0
9 297067 167 2 Mar, 2016 2 1
10 297067 168 3 Mar, 2016 3 0
11 297067 169 4 Mar, 2016 4 0
12 297067 170 5 Mar, 2016 5 1
13 297067 231 6 Mar, 2016 6 0
14 297067 232 7 Mar, 2016 7 0
15 338143 166 1 Mar, 2016 1 1
16 338143 167 2 Mar, 2016 2 1
17 338143 168 3 Mar, 2016 3 0
18 338143 169 4 Mar, 2016 4 1
19 338143 170 5 Mar, 2016 5 0
20 338143 231 6 Mar, 2016 6 0
21 338143 232 7 Mar, 2016 7 0
のようになります
DECLARE @TResults TABLE
(
keyId INT,
peopleId INT,
sesnId INt,
sesName nvarchar(max),
sesOrder int,
regStatus int
)
INSERT @TResults
SELECT 1, 169199, 166, '1 Mar, 2016', 1, 0 UNION ALL
SELECT 2, 169199, 167, '2 Mar, 2016', 2, 1 UNION ALL
SELECT 3, 169199, 168, '3 Mar, 2016', 3, 1 UNION ALL
SELECT 4, 169199, 169, '4 Mar, 2016', 4, 0 UNION ALL
SELECT 5, 169199, 170, '5 Mar, 2016', 5, 0 UNION ALL
SELECT 6, 169199, 231, '6 Mar, 2016', 6, 0 UNION ALL
SELECT 7, 169199, 232, '7 Mar, 2016', 7, 0 UNION ALL
SELECT 8, 297067, 166, '1 Mar, 2016', 1, 0 UNION ALL
SELECT 9, 297067, 167, '2 Mar, 2016', 2, 1 UNION ALL
SELECT 10, 297067, 168, '3 Mar, 2016', 3, 0 UNION ALL
SELECT 11, 297067, 169, '4 Mar, 2016', 4, 0 UNION ALL
SELECT 12, 297067, 170, '5 Mar, 2016', 5, 1 UNION ALL
SELECT 13, 297067, 231, '6 Mar, 2016', 6, 0 UNION ALL
SELECT 14, 297067, 232, '7 Mar, 2016', 7, 0 UNION ALL
SELECT 15, 338143, 166, '1 Mar, 2016', 1, 1 UNION ALL
SELECT 16, 338143, 167, '2 Mar, 2016', 2, 1 UNION ALL
SELECT 17, 338143, 168, '3 Mar, 2016', 3, 0 UNION ALL
SELECT 18, 338143, 169, '4 Mar, 2016', 4, 1 UNION ALL
SELECT 19, 338143, 170, '5 Mar, 2016', 5, 0 UNION ALL
SELECT 20, 338143, 231, '6 Mar, 2016', 6, 0 UNION ALL
SELECT 21, 338143, 232, '7 Mar, 2016', 7, 0
SELECT * FROM @TResults
今私が欲しい私は2を与える場合、それは= 0
regStatusでそれぞれEMPIDから2連続でレコードを返さなければならないと仮定し、ありますex。
keyId peopleId sesnId sesName sesOrder **regStatus**
4 169199 169 4 Mar, 2016 4 0
5 169199 170 5 Mar, 2016 5 0
6 169199 231 6 Mar, 2016 6 0
7 169199 232 7 Mar, 2016 7 0
は4つのレコードを持っていることを
keyId peopleId sesnId sesName sesOrder **regStatus**
4 169199 169 4 Mar, 2016 4 0
5 169199 170 5 Mar, 2016 5 0
6 169199 231 6 Mar, 2016 6 0
7 169199 232 7 Mar, 2016 7 0
10 297067 168 3 Mar, 2016 3 0
11 297067 169 4 Mar, 2016 4 0
13 297067 231 6 Mar, 2016 6 0
14 297067 232 7 Mar, 2016 7 0
19 338143 170 5 Mar, 2016 5 0
20 338143 231 6 Mar, 2016 6 0
は注意してください。しかし、彼らは連続しており、我々は2つの連続した記録を返すように求めていた。
OR
私は3を与えるとそれは私が4を与える場合は、各EMPIDから4連続でレコードを返さなければならないとしregStatus = 0
keyId peopleId sesnId sesName sesOrder **regStatus**
4 169199 169 4 Mar, 2016 4 0
5 169199 170 5 Mar, 2016 5 0
6 169199 231 6 Mar, 2016 6 0
19 338143 170 5 Mar, 2016 5 0
20 338143 231 6 Mar, 2016 6 0
21 338143 232 7 Mar, 2016 7 0
とそれぞれEMPIDから3連続でレコードを返さなければならないと仮定regStatus = 0の場合
keyId peopleId sesnId sesName sesOrder **regStatus**
4 169199 169 4 Mar, 2016 4 0
5 169199 170 5 Mar, 2016 5 0
6 169199 231 6 Mar, 2016 6 0
7 169199 232 7 Mar, 2016 7 0
これを達成するために手伝ってください。 ROW_NUMBER
秒の差を利用し
は' KEYID = 21'含めるべきではありませんか? –