Rateplan というテーブルがあり、データは次のようになります。
例えば :
SELECT Rateplanid
, listingid
, rentalunitid
, validfromdate
, validtodate
FROM Rateplan
WHERE listingid = 721760
AND rentalunitid = 3027217
ORDER BY
listingid
, rentalunitid
, validfromdate
, validtodate
Rateplanid listingid rentalunitid validfromdate validtodate
3 721760 3027217 2012-08-09 00:00:00.000 2012-10-18 00:00:00.000
22563 721760 3027217 2012-10-26 00:00:00.000 2012-11-27 00:00:00.000
25412 721760 3027217 2012-10-30 00:00:00.000 2012-10-30 00:00:00.000
25421 721760 3027217 2012-10-31 00:00:00.000 2012-11-27 00:00:00.000
26945 721760 3027217 2012-11-01 00:00:00.000 2012-11-07 00:00:00.000
34807 721760 3027217 2012-11-14 00:00:00.000 2012-11-27 00:00:00.000
35947 721760 3027217 2012-11-15 00:00:00.000 2012-11-15 00:00:00.000
43793 721760 3027217 2012-11-29 00:00:00.000 2013-01-03 00:00:00.000
62665 721760 3027217 2013-01-03 00:00:00.000 2199-12-31 00:00:00.000
現在の行のロジックは Validtodate であり、次の行の Validfromdate に基づいて更新する必要があります。nextrow の ValidfromDate が <= 現在の行の Validtodate である場合、次の行の値の ValisfromDate よりも 1 日短いものとして更新する必要があります。ただし、更新された Validtodate が現在の行の validfromdate 以下である必要があることも確認する必要があります。
期待される出力:
Rateplanid listingid rentalunitid validfromdate validtodate
3 721760 3027217 2012-08-09 00:00:00.000 2012-10-18 00:00:00.000
22563 721760 3027217 2012-10-26 00:00:00.000 2012-10-29 00:00:00.000
25412 721760 3027217 2012-10-30 00:00:00.000 2012-10-30 00:00:00.000
25421 721760 3027217 2012-10-31 00:00:00.000 2012-10-31 00:00:00.000
26945 721760 3027217 2012-11-01 00:00:00.000 2012-11-07 00:00:00.000
34807 721760 3027217 2012-11-14 00:00:00.000 2012-11-14 00:00:00.000
35947 721760 3027217 2012-11-15 00:00:00.000 2012-11-15 00:00:00.000
43793 721760 3027217 2012-11-29 00:00:00.000 2013-01-02 00:00:00.000
62665 721760 3027217 2013-01-03 00:00:00.000 2199-12-31 00:00:00.000