我必須修改大型價格表,以便每篇文章只有一個有效價格。 有時銷售員工會插入新的價格,並忘記更改舊的無限有效日期。sql-query將所有validTo日期更改爲下一個validFrom日期減去一天
所以我必須寫一個SQL查詢來改變所有validTo日期到下一個validFrom日期減一天,當validTo日期有着無窮的有效性(9999-12-31)。 但我不知道如何才能達到這與只有SQL(Oracle 12)。
anr price validFrom validTo
1 447.1 2015-06-01 9999-12-31 <
1 447.2 2015-06-16 2015-06-16
1 447.3 2015-06-17 2015-06-17
1 447.4 2015-06-22 2015-06-22
1 447.5 2015-07-06 9999-12-31 <
1 395.0 2015-07-20 2015-07-20
1 447.6 2015-08-03 9999-12-31 <
1 447.7 2015-08-17 9999-12-31 <
1 447.8 2015-08-24 9999-12-31 <
1 395.0 2015-09-07 2015-09-07
1 450.9 2015-11-15 9999-12-31 < no change because it is the last entry
更新表後,結果應該像
anr price validFrom validTo
1 447.1 2015-06-01 2015-06-15 <
1 447.2 2015-06-16 2015-06-16
1 447.3 2015-06-17 2015-06-17
1 447.4 2015-06-22 2015-06-22
1 447.5 2015-07-06 2015-07-19 <
1 395.0 2015-07-20 2015-07-20
1 447.6 2015-08-03 2015-08-16 <
1 447.7 2015-08-17 2015-08-23 <
1 447.8 2015-08-24 2015-09-06 <
1 395.0 2015-09-07 2015-09-07
1 450.9 2015-11-15 9999-12-31 <
有可能,有時間跨度沒有有效的價格。當有無限的有效價格,而另一個價格只有很短的有效期時,舊價格不能再次變爲有效。這就是我必須重新計算validTo日期的原因。 – tonirush
價格可以對指定的跨度有效,例如10天或價格可以有效,直到添加新的價格。所以,當我放棄EndDate列時,我失去了這些信息。 – tonirush
我明白了,有時候,當某個產品不可用時,您在這段時間內沒有給出價格。是的,當你放棄專欄時你會失去這些信息。你的桌子有兩個目的,1.當一個項目是/可用的,2.以什麼價格。我沒有看到這個。 –