私はテーブルProductPriceを持っています
INSERT INTO ProductPrice
(
ProductId,
EffectiveDt,
InactiveDt,
Price
)
間にギャップがある、または重複している日付があります
私がこれまでに持っていることは、最初の発効日が最初で、次に製品IDでランク付けされたテーブルです
これは
SELECT
pp.ProductId,
pp.EffectiveDt,
pp.InactiveDt,
ROW_NUMBER() OVER (PARTITION BY pp.ProductId ORDER BY pp.EffectiveDt ASC) AS RankByDate
INTO
#ProductrankByDate
FROM
ProductPrice pp
ORDER BY
pp.ProductId
今やりたいことは更新です
InactiveDt を取得し、次のランクの effectiveDt で更新します。
それで
01/07/2012 , 10/07/2012
15/07/2012 , 20/07/2012
と
01/07/2012 , 10/07/2012
08/07/2012 , 20/07/2012
になるだろう
01/07/2012 , 14/07/2012
15/07/2012 , 20/07/2012
と
01/07/2012 , 07/07/2012
08/07/2012 , 20/07/2012
私はこれまでに持っています
UPDATE pp
SET
pp.InactiveDt = DATEADD(DAY, -1, pdb.EffectiveDt)
FROM
#ProductrankByDate AS pp
INNER JOIN
#ProductrankByDate AS pdb
ON
pp.ProductId = pdb.ProductId
WHERE
pp.RankByDate = pdb.RankByDate + 1
AND pp.ProductId = pdb.ProductId
しかし、明らかにこれは機能しないため、これまたは新しいステートメントを変更する際の助けは大いに役立ちます