開始日から終了日を作成する方法を教えてください。
製品はテストのために会社に照会されましたが、会社との製品は異なる日に複数のテストを実行し、テスト日を記録して製品の状態、つまり(outcomeID)を確立します。testDateであるStartDateと次の行の開始日であるEndDateを確立する必要があります。しかし、複数の連続したテストで同じOutcomeIDが得られた場合は、最初のテストの開始日と最後のテストの終了日を含む1つの行のみを返す必要があります。言い換えると、outcomeIDが数回の連続したテストで変化しなかった場合。これが私のデータセットです
DECLARE @ProductTests TABLE
(
RequestID int not null,
ProductID int not null,
TestID int not null,
TestDate datetime null,
OutcomeID int
)
insert into @ProductTests
(RequestID ,ProductID ,TestID ,TestDate ,OutcomeID )
select 1,2,22,'2005-01-21',10
union all
select 1,2,42,'2007-03-17',10
union all
select 1,2,45,'2010-12-25',10
union all
select 1,2,325,'2011-01-14',13
union all
select 1,2,895,'2011-08-10',15
union all
select 1,2,111,'2011-12-23',15
union all
select 1,2,636,'2012-05-02',10
union all
select 1,2,554,'2012-11-08',17
--select * from @producttests
RequestID ProductID TestID TestDate OutcomeID
1 2 22 2005-01-21 10
1 2 42 2007-03-17 10
1 2 45 2010-12-25 10
1 2 325 2011-01-14 13
1 2 895 2011-08-10 15
1 2 111 2011-12-23 15
1 2 636 2012-05-02 10
1 2 554 2012-11-08 17
そして、これは私が達成する必要があることです。
RequestID ProductID StartDate EndDate OutcomeID
1 2 2005-01-21 2011-01-14 10
1 2 2011-01-14 2011-08-10 13
1 2 2011-08-10 2012-05-02 15
1 2 2012-05-02 2012-11-08 10
1 2 2012-11-08 NULL 17
データセットからわかるように、最初の3つのテスト(22、42、および45)はすべてOutcomeID 10でした。したがって、私の結果では、テスト22の開始日とテスト325の開始日であるテスト45の終了日のみが必要です。テスト636でわかるように、outcomeIDは15から10に戻ったため、これも返す必要があります。
-これは、次のスクリプトを使用して現時点で達成できたものです
select T1.RequestID,T1.ProductID,T1.TestDate AS StartDate
,MIN(T2.TestDate) AS EndDate ,T1.OutcomeID
from @producttests T1
left join @ProductTests T2 ON T1.RequestID=T2.RequestID
and T1.ProductID=T2.ProductID and T2.TestDate>T1.TestDate
group by T1.RequestID,T1.ProductID ,T1.OutcomeID,T1.TestDate
order by T1.TestDate
結果:
RequestID ProductID StartDate EndDate OutcomeID
1 2 2005-01-21 2007-03-17 10
1 2 2007-03-17 2010-12-25 10
1 2 2010-12-25 2011-01-14 10
1 2 2011-01-14 2011-08-10 13
1 2 2011-08-10 2011-12-23 15
1 2 2011-12-23 2012-05-02 15
1 2 2012-05-02 2012-11-08 10
1 2 2012-11-08 NULL 17