如何查询出连续日期记录

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

如何查询出连续日期记录

 

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天,或任何一天。

 

你可能感兴趣的:(查询)