【发布时间】:2017-11-03 11:40:38
【问题描述】:
我在 SQLServer 2008r2 中有一张表,如下所示。
我想选择 [Fg] 列 = 1 的所有记录,按 [Id] 顺序连续导致每个 [T_Id] 和 [N_Id] 组合的值 2。
在某些情况下,[Fg] = 2 之前的记录不 = 1
[Fg] 的值可以有任意数量的记录 = 1,但对于每个 [T_Id] 和 [N_Id] 组合,只有一个记录 [Fg] = 2。
因此对于下面的示例,我想选择具有[Id]s (4,5) 和 (7,8,9) 和 (19,20) 的记录。
[T_Id] 3 和 4 的任何记录都被排除在外。
预期输出
示例数据集
DECLARE @Data TABLE ( Id INT IDENTITY (1,1), T_Id INT, N_Id INT, Fg TINYINT )
INSERT INTO @Data
(T_Id, N_Id, Fg)
VALUES
(1, 2, 0), (1, 2, 1), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 3, 0), (2, 3, 1),
(2, 3, 1), (2, 3, 2), (3, 4, 0), (3, 4, 0), (3, 4, 0), (3, 4, 2), (4, 5, 0),
(4, 5, 1), (4, 5, 0), (4, 5, 2), (5, 7, 0), (5, 7, 1), (5, 7, 2)
【问题讨论】:
-
所以,FG 0 的所有记录都必须被过滤?因为否则 0、1、2 将是连续记录的正确顺序,不是吗?既然 ID 7 和 8 都具有 FG 1,为什么 ID 7 被认为是正确的记录?
-
@Tyron78 你可以有多个连续记录,其中 FG = 1。我在问题中解释了这一点
-
看看here;为什么使用 SQLServer 2008r2?
标签: sql-server tsql sql-server-2008-r2