1

私はこのようなテーブルを持っています:

PartNr、ProductionSite、ProductionType、PODate、PoPrice、PoCurrency

最初の 3 列は固有の製品を定義します。私がやりたいことは、価格を有効な日付範囲にするために、以前の注文日を含む列をもう 1 つ追加することです。次に例を示します。

PartNr....  Site....   Type....    Date

111111      BBBBB       100     2008-06-10

111111      BBBBB       100     2012-01-18

111111      BBBBB       100     2012-01-30

111111      AAAAA       100     2008-06-10

111111      AAAAA       100     2012-01-18

111111      AAAAA       100     2012-01-30

これを手に入れたい

PartNr....   Site ....  Type  ....  Date    .... Added Column

111111  BBBBB       100     2008-06-10  ...       0

111111  BBBBB       100     2012-01-18  ...     2008-06-10

111111  BBBBB       100     2012-01-30  ...     2012-01-18

111111  AAAAA       100     2008-06-10  ...     0

111111  AAAAA       100     2012-01-18  ...     2008-06-10

111111  AAAAA       100     2012-01-30  ...     2012-01-18 
4

1 に答える 1

1

次のような、現在の行の日付より下にある (および partnr などに一致する) 最大の日付を選択するサブクエリが必要です。

select PartNr, ProductionSite, ProductionType, PODate, PoPrice, PoCurrency,
(select max(PODate) from table t2 where t2.PODate < t1.PODate and t2.PartNr = t1.PartNr and t2.ProductionSite = t1.ProductionSite and t2.ProductionType = t1.productionType
 as added_column from table t1

また、テーブルの列として持つ必要もありません。データベース設計の基本ルールは、計算できるものを保存しないことです*。

*データベースがまったく、またはほとんど変更されず、非常に高速である必要がある場合を除きます。これを「データ ウェアハウス」と呼びます。

于 2013-04-11T08:43:34.203 に答える