有在论坛上看到一帖,《请教查询出连续日期记录的方法》,截图如下:

Insus.NET尝试写了程序并做了测试,可以得到预期的结果,SQL代码可参考和学习之用。
View Code
CREATE TABLE # temp (IDD VARCHAR ( 10 ),SDATE DATETIME )
DECLARE @sD DATETIME -- 开始日期
DECLARE @eD DATETIME -- 结束日期
-- 在记录中,找出开始与结束日期
SELECT @sD = MIN ( [ SDATE ] ), @eD = MAX ( [ SDATE ] ) FROM [ TT ]
DECLARE @N INT = 0 -- 宣告一个变量,存储累记录数
-- 循环日期
WHILE ( @sD <= @eD )
BEGIN
-- 如果存在
IF EXISTS ( SELECT TOP 1 1 FROM [ TT ] WHERE [ SDATE ] = @sD )
BEGIN
SET @sD = DATEADD ( day , 1 , @sD ) -- 日期加1天
SET @N = @N + 1 -- 记录加1
END
ELSE -- 如果不存在
BEGIN
IF ( @N >= 3 ) -- 判断是否大于或等于3
INSERT INTO # temp SELECT [ IDD ] , [ SDATE ] FROM [ TT ] WHERE [ SDATE ] BETWEEN DATEADD ( day , - @N , @sD ) AND @sD
-- 日期加1天
SET @sD = DATEADD ( day , 1 , @sD )
SET @N = 0 -- 初始化为0
END
END
-- 列出符合条件的记录
SELECT * FROM # temp
上面的方法,实际可以把IF (@N >= 3)这句中的3改为一个变量,这样可以方便以后的程序扩展,某一天需要改为连续2天,4天,5天,或任何一天。
2319




被折叠的 条评论
为什么被折叠?



