次の解決策がありますが、少し異なるように更新する必要があります。ここに私が今持っている私のコードがあります:
DECLARE @table TABLE (Status VARCHAR(50), StartDate DATETIME)
INSERT INTO @table VALUES ('UP', '01/01/2012')
INSERT INTO @table VALUES ('UP', '04/15/2012')
INSERT INTO @table VALUES ('Down','06/12/2012')
INSERT INTO @table VALUES ('UP','10/04/2012')
SELECT
t1.Status, t1.StartDate, ISNULL(t2.StartDate,GetDate()) AS 'EndDate',
DateDiff(day,t1.startdate,ISNULL(t2.StartDate,GetDate())) as StatusDays
FROM
(SELECT Status, StartDate, ROW_NUMBER() OVER
(ORDER BY StartDate) AS 'num' FROM @table) t1
LEFT JOIN
(SELECT Status, StartDate, ROW_NUMBER() OVER
(ORDER BY StartDate) AS 'num' FROM @table) t2
ON t1.num = t2.num-1
これで結果が得られますが、最初の 2 行は両方とも UP です。これが私が今得たものです。
Status StartDate EndDate StatusDays
UP 2012-01-01 2012-04-15 105
UP 2012-04-15 2012-06-12 58
Down 2012-06-12 2012-10-04 114
UP 2012-10-04 2013-01-29 117
ということで、以下のまとめをご覧いただきたいと思います。
Status StartDate EndDate StatusDays
UP 2012-01-01 2012-06-12 163
Down 2012-06-12 2012-10-04 114
UP 2012-10-04 2013-01-29 117