首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

小弟新手第一帖求一段SQL代码,好心请多多帮忙解决方法

2012-04-13 
小弟新手第一帖求一段SQL代码,好心请多多帮忙有以下表真实槽号序列号开始时间结束时间记录1011235:00NULL1

小弟新手第一帖求一段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), 记录 BIT)
INSERT INTO @DATA
SELECT 101, 123, '5:00 ', NULL, 1


UNION
SELECT 101, 124, '6:00 ', NULL, 1
UNION
SELECT 101, 125, NULL, '7:00 ', 0
UNION
SELECT 101, 126, NULL, '7:50 ', 0
UNION
SELECT 101, 127, NULL, '7:55 ', 0
UNION
SELECT 102, 128, NULL, '7:58 ', 0
UNION
SELECT 102, 129, '7:59 ', NULL, 1
UNION
SELECT 102, 130, '8:00 ', NULL, 1
UNION
SELECT 102, 131, NULL, '8:55 ', 0
UNION
SELECT 102, 132, NULL, '8:58 ', 0


DELETE @DATA FROM @DATA AS A WHERE 开始时间 > (SELECT MIN(开始时间) FROM @DATA WHERE 真实槽号 = A.真实槽号)
DELETE @DATA FROM @DATA AS A WHERE 序列号 < (SELECT MIN(序列号) FROM @DATA WHERE 真实槽号 = A.真实槽号 AND 结束时间 IS NULL)
DELETE @DATA FROM @DATA AS A WHERE 结束时间 > (SELECT MIN(结束时间) FROM @DATA WHERE 真实槽号 = A.真实槽号)

SELECT * FROM @DATA

/*
真实槽号 序列号 开始时间 结束时间 记录
101 123 5:00 NULL 1
101 125 NULL 7:00 0
102 129 7:59 NULL 1
102 131 NULL 8:55 0
*/

热点排行