oracle 按日期动态修改和扩展SQL记录

axkjgtzd  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(124)

我拼命寻求所有的甲骨文SQL大师和超级英雄在这里的帮助位。任何建议和/或帮助将不胜感激。
我有一张table

表1和DML

create table tab_A  
(item       varchar2(20),
 dest       varchar2(20),
 qty        number,
 eff        date,
 disc       date,
 eventbegin date,
 eventend   date,
 eventqty   number
);

 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);

表A**
| 项目|DEST|数量|EFF|盘|晚上开始|活动|事件|
| --|--|--|--|--|--|--|--|
| item1| dest1| 18 |2023年7月27日|2023年9月4日|2023年8月4日|2023年9月25日| 6 |
| item1| dest1| 30 |2023年9月4日|2023年10月2日|2023年8月4日|2023年9月25日| 6 |
| item1| dest1| 18 |2023年10月2日|2025年9月1日|2023年8月4日|2023年9月25日| 6 |

期望输出

新创建的EFF和DISC日期应始终连续。
我需要根据以下内容调整EFF和DISC日期

  • 如果eff和disc日期小于EVENTBEGIN,则保持原样
  • 如果EVENTBEGIN在EFF和DISC之间,则将DISC日期设置为EVENTBEGIN并开始新的ROW
  • 新行EVENTBEGIN成为新的EFF,如果前一行的DISC小于EVENTEND,则使用前一行DISC。其中EVENTBEGIN为EFF的Orig_qty需要将EVENTQTY添加到ORIG_QTY。
  • 如果下一行的EFF小于EventEnd,则EFF和DISC日期是CURRENT ROW DISC和EVENTEND的出租人。EventEnd窗口为DISC的Orig_qty需要将EVENTQTY添加到ORIG_QTY。
  • 事件结束日期是新的EFF,直到DISC日期结束,数量保持不变。
  • 如果EFF大于EventEnd,则保留记录

新创建的EFF和DISC日期应始终连续。
| 项目|DEST|原材料数量|生效日期|光盘日期|
| --|--|--|--|--|
| item1| loc1| 18 |2023年7月27日|2023年8月28日|
| item1| loc1| 24 |2023年8月28日|2023年9月4日|
| item1| loc1| 36 |2023年9月4日|2023年9月25日|
| item1| loc1| 30 |2023年9月25日|2023年10月2日|
| item1| loc1| 18 |2023年10月2日|一九九九年一月一日|

pgky5nke

pgky5nke1#

我看不出你会为此使用多个查询,尽管这不应该是一个问题。这可能需要一个多小时才能解决,但我希望我能帮助你。
你可能需要使用CASE WHEN-expressions来处理所有的ifs和buts。https://www.oracletutorial.com/oracle-basics/oracle-case/
您也可以通过使用多个查询连接到一个结果来帮助解决这个问题,因为您有三行,而需要六行。https://www.oracletutorial.com/oracle-basics/oracle-union/
在处理部分日期问题时,似乎使用LAG()函数可能适合您,因为它会查看前一行。https://www.oracletutorial.com/oracle-analytic-functions/oracle-lag/
您可能还希望使用公共表表达式(CTE),它可以帮助简化查询。这是可选的,可能会使它更难可视化,但它不太可能更高的性能。https://www.databasestar.com/sql-cte-with/

相关问题