sql 状态表 求封闭到开启两条数据

sql 状态表 求关闭到开启两条数据

                 时间                 状态
 
        2015-03-24 09:18:29.000         1
2015-03-24 09:17:59.000         0
2015-03-24 09:17:30.000         1
2015-03-24 09:16:59.000 0
2015-03-24 09:16:29.000 1
2015-03-24 09:16:00.000 0
2015-03-24 09:15:30.000 0

0是关闭  1是开启。如何获取 从关闭到开启的两条数据 
显示结果
      关闭起始时间                                关闭结束时间                           关闭时间(秒)
2015-03-24 09:15:30.000         2015-03-24 09:16:29.000                  60
2015-03-24 09:16:59.000        2015-03-24 09:17:30.000                    30
2015-03-24 09:17:59.000        2015-03-24 09:18:29.000                  30
------解决思路----------------------
;WITH CTE AS(
SELECT 时间,状态
,ROW_NUMBER()OVER(ORDER BY 时间)RN1
,ROW_NUMBER()OVER(PARTITION BY 状态 ORDER BY 时间)RN2
FROM TB
)
,CTE1 AS(
SELECT MIN(时间)时间,状态
,ROW_NUMBER()OVER(ORDER BY MIN(时间))RN
FROM CTE
GROUP BY RN1-RN2,状态
)
SELECT T1.时间 AS [关闭起始时间],T2.时间 AS [关闭结束时间]
,DATEDIFF(SECOND,T1.时间,T2.时间)+1 AS [关闭时间(秒)]
FROM CTE1 T1
JOIN CTE1 T2 ON T1.RN+1=T2.RN
WHERE T1.状态=0

------解决思路----------------------
CREATE TABLE #ttt
(
stime DATETIME,
STATE INT
)


INSERT INTO #ttt
        ( stime ,
          STATE
        )
SELECT '2015-03-24 09:15:30.000',0 UNION ALL
SELECT '2015-03-24 09:16:00.000',0 UNION ALL
SELECT '2015-03-24 09:16:29.000',1 UNION ALL
SELECT '2015-03-24 09:16:59.000',0 UNION ALL
SELECT '2015-03-24 09:17:30.000',1 UNION ALL
SELECT '2015-03-24 09:17:59.000',0 UNION ALL
SELECT '2015-03-24 09:18:29.000',1 


SELECT stime,etime,DATEDIFF(SECOND,stime,etime ) ds
FROM
(

SELECT 
ISNULL(
(
SELECT top 1 stimeFROM #ttt WHERE stime>(SELECT TOP 1 stime FROM #ttt WHERE STATE=1 AND stime<a.stime ORDER BY stime DESC) AND STATE=0
),
(SELECT TOP 1 stime FROM #ttt WHERE STATE=0 AND stime<a.stime ORDER BY stime)
) stime,a.stime etime
FROM #ttt a 
WHERE STATE=1 
) a


stime etime ds
2015-03-24 09:15:30.000 2015-03-24 09:16:29.000 59
2015-03-24 09:16:59.000 2015-03-24 09:17:30.000 31
2015-03-24 09:17:59.000 2015-03-24 09:18:29.000 30