0

私はテーブル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 

しかし、明らかにこれは機能しないため、これまたは新しいステートメントを変更する際の助けは大いに役立ちます

4

1 に答える 1

0

私はそれをうまく機能させることができました。私がしなければならなかったのは、pbd.RankByDateではなくpp.RankByDateの後ろに+1を移動することだけです。

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 + 1 = pdb.RankByDate
AND pp.ProductId      = pdb.ProductId 
于 2012-07-30T10:34:57.133 に答える