You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

当前表数据

ITEMDESTQTYEFFDISCEVENTBEGINEVENTENDEVENTQTY
item1dest1187/27/20239/4/20238/4/20239/25/20236
item1dest1309/4/202310/2/20238/4/20239/25/20236
item1dest11810/2/20239/1/20258/4/20239/25/20236

调整规则

新生成的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,则保持记录不变

期望输出

ITEMDESTORIG_QTYEFF_DATEDISC_DATE
item1loc1187/27/20238/4/2023
item1loc1248/4/20239/4/2023
item1loc1369/4/20239/25/2023
item1loc1309/25/202310/2/2023
item1loc11810/2/20231/1/2999

内容的提问来源于stack exchange,提问作者B-Rad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:05:35