我正在处理的表包含三个组成部分:
ID
列(另一个表中的主键)from
/to
列。价值观:
ID Data From To
1 a 2015-01-01 2015-01-05
1 a 2015-01-06 2015-01-10
1 b 2015-01-11 2015-01-15
1 a 2015-01-16 2015-01-20
2 c 2015-01-01 2015-01-05
2 c 2015-01-06 2015-01-10
Run Code Online (Sandbox Code Playgroud)
该表通过以某些时间间隔拍摄另一个数据源的“快照”并将有效日期分配给记录来更新。问题是这些快照会为在该时间间隔内根本没有更改的记录(具有不同的有效日期)创建重复条目。
我想通过查找具有连续日期的行并合并它们并为它们分配一个有效期来减小表的大小。例如:
ID Data From To
1 a 2015-01-01 2015-01-10
1 b 2015-01-11 2015-01-15
1 a 2015-01-16 2015-01-20
2 c 2015-01-01 2015-01-10
Run Code Online (Sandbox Code Playgroud)
我目前的逻辑是:
我知道游标效率很低(我有一个很大的数据集),所以我正在寻找其他方法。
我有一个游标定义为:
DECLARE idCursor CURSOR
FOR SELECT DISTINCT [id], [data]
FROM #tempTable
Run Code Online (Sandbox Code Playgroud)
我有一个变量定义为:
DECLARE @currentId TABLE (
[id] int,
[data] char(1)
);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将下一个结果提取到 @currentId
FETCH NEXT FROM idCursor INTO @currentId
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Must declare the scalar variable "@currentId".
Run Code Online (Sandbox Code Playgroud)
如何在表中获取游标获取的结果?我知道我可以声明两个变量并单独存储结果。但是对于包含许多列的表来说,这将是耗时的。