日期:2014-05-19  浏览次数:20620 次

小弟新手第一帖求一段SQL代码,好心请多多帮忙
有以下表
真实槽号   序列号   开始时间   结束时间   记录
101               123             5:00     NULL           1
101               124             6:00     NULL           1
101               125             NULL       7:00         0
101               126             NULL       7:50         0
101               127             NULL       7:55         0
102               128             NULL       7:58         1
……
……
如何做才能将多个个结束时间/开始时间   除最开始行之外的都删除,只保留一个开始和对应的结束时间
双游标   谢谢

下面自己写的程序无法搞定,不知道问题出在什么地方。
--下面要删除多余项,要每个开始时间只对应一个结束时间
--@X@Y变量用来存放开始和结束时间

Declare   @X   int
Declare   @Y   int

/*--故障类型
Declare   @fault_type   varchar(50)
--故障序列号
Declare   @fault_rs   int
--故障真实槽号
Declare   @fault_real_no   int
*/
--声明游标1
Declare   #cur_1   cursor   scroll
for   select   变量
from   Report  

open     #cur_1  

FETCH   first   FROM   #cur_1
INTO   @X

--循环1
WHILE   @@FETCH_STATUS=0
    BEGIN
      --声明游标2    
          Declare   #cur_2     cursor   scroll   dynamic
          for   select   变量
          from   Report  

          open     #cur_2  

          FETCH   RELATIVE   1   FROM   #cur_2
          INTO   @Y
    --循环2
      WHILE   @@FETCH_STATUS=0
        BEGIN
          if   @X=@Y
              DELETE   from   Report   WHERE   CURRENT   OF   #cur_2    
              FETCH   NEXT   FROM   #cur_2
              INTO   @Y
          if   @X!=@Y
                break
        END
      --循环2结束
              CLOSE   #cur_2
              DEALLOCATE   #cur_2

FETCH   next   FROM   #cur_1
INTO   @X
END
    --循环1结束
        CLOSE   #cur_1
        DEALLOCATE   #cur_1



------解决方案--------------------
终于看明白了

DECLARE @DATA TABLE(真实槽号 INT, 序列号 INT, 开始时间 VARCHAR(10), 结束时间 VARCHAR(10