【发布时间】:2016-04-01 04:34:40
【问题描述】:
为了您的方便,我将显示我的数据和所需的输出。
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
上述命令的输出将是这样的
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
现在我想要的是,假设如果我给 2。它必须从 regStatus = 0 的每个 empid 返回 2 条连续记录
例如。
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
注意
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 条记录。但它们是连续的,我们要求返回 2 个连续的记录。
或
假设如果我给 3。它必须从每个 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
19 338143 170 5 Mar, 2016 5 0
20 338143 231 6 Mar, 2016 6 0
21 338143 232 7 Mar, 2016 7 0
假设如果我给 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
7 169199 232 7 Mar, 2016 7 0
请帮助我实现这一目标。
【问题讨论】:
-
如果
N = 2不应该包含KeyId = 21?
标签: sql-server sql-server-2008 select