Oracle SQL:动态修正并扩展记录日期的技术实现求助
Oracle SQL 日期分段与数量调整需求求解
恳请Oracle SQL领域的专家提供帮助,任何建议或协助都将万分感谢。
表结构与测试数据
DDL语句
create table tab_A (item varchar2(20), dest varchar2(20), qty number, eff date, disc date, eventbegin date, eventend date, eventqty number );
DML插入语句
insert into tab_a values('item1','dest1',18,'27 July 2023','4 Sep 2023','4 Aug 2023','25 Sep 2023',6); insert into tab_a values('item1','dest1',30,'4 Sep 2023','2 Oct 2023','4 Aug 2023','25 Sep 2023',6); insert into tab_a values('item1','dest1',18,'2 Oct 2023','1 Sep 2025','4 Aug 2023','25 Sep 2023',6);
当前表数据
| ITEM | DEST | QTY | EFF | DISC | EVENTBEGIN | EVENTEND | EVENTQTY |
|---|---|---|---|---|---|---|---|
| item1 | dest1 | 18 | 7/27/2023 | 9/4/2023 | 8/4/2023 | 9/25/2023 | 6 |
| item1 | dest1 | 30 | 9/4/2023 | 10/2/2023 | 8/4/2023 | 9/25/2023 | 6 |
| item1 | dest1 | 18 | 10/2/2023 | 9/1/2025 | 8/4/2023 | 9/25/2023 | 6 |
调整规则
新生成的EFF和DISC日期必须连续,需根据以下规则调整:
- 若EFF和DISC日期均早于EVENTBEGIN,则保持记录不变
- 若EVENTBEGIN介于EFF和DISC之间,则将DISC设为EVENTBEGIN,并新增一行记录
- 新增行的EFF为EVENTBEGIN,若原行的DISC早于EVENTEND,则使用原行的DISC;该新增行的ORIG_QTY需在原QTY基础上加上EVENTQTY
- 若下一行的EFF早于EVENTEND,则以该EFF为新的EFF,DISC取当前行DISC与EVENTEND中的较小值;该段的ORIG_QTY需加上EVENTQTY
- 以EVENTEND作为新的EFF,直至原DISC日期,QTY保持不变
- 若EFF晚于EVENTEND,则保持记录不变
期望输出
| ITEM | DEST | ORIG_QTY | EFF_DATE | DISC_DATE |
|---|---|---|---|---|
| item1 | loc1 | 18 | 7/27/2023 | 8/4/2023 |
| item1 | loc1 | 24 | 8/4/2023 | 9/4/2023 |
| item1 | loc1 | 36 | 9/4/2023 | 9/25/2023 |
| item1 | loc1 | 30 | 9/25/2023 | 10/2/2023 |
| item1 | loc1 | 18 | 10/2/2023 | 1/1/2999 |
内容的提问来源于stack exchange,提问作者B-Rad
相关产品推荐
相关产品推荐

