【发布时间】:2021-05-17 00:05:29
【问题描述】:
我有一个表,其中有 2 个日期列,总共 4 个 - valid_from_dt 和 valid_to_dt。其他 2 列是 itm_no 和 price。我需要在 itm_no、price 和一系列连续日期中找到 valid_to_dt 的最大值。这将使用一定程度的差距和孤岛解决方案。然后必须在该组的所有行中显示该最大值。我会分享表格的代码。
create table price_tab (itm_no varchar2(10), price number, valid_from_dt date, valid_to_dt date);
insert into price_tab values ('A001', 83, '01-JAN-21', '05-JAN-21');
insert into price_tab values ('A001', 83, '06-JAN-21', '12-JAN-21');
insert into price_tab values ('A001', 98, '13-JAN-21', '17-JAN-21');
insert into price_tab values ('A001', 83, '19-JAN-21', '24-JAN-21');
insert into price_tab values ('A001', 83, '25-JAN-21', '30-JAN-21');
insert into price_tab values ('A002', 71, '01-JAN-21', '11-JAN-21');
insert into price_tab values ('A001', 83, '31-JAN-21', '04-FEB-21');
insert into price_tab values ('A001', 77, '17-FEB-21', '25-FEB-21');
如上所示,从 1 月 1 日到 1 月 12 日,itm_no A001 的价格为 83 有 2 行。因此,第一行的 max_valid_to 应为 1 月 12 日。价格为 83 的 itm_no A001 也可在 1 月 19 日至 2 月 4 日期间提供。 1 月 13 日至 18 日,A001 价格为 83 的差距。
我有查询来获取 itm_no、价格和一系列连续日期的组的 max valid_to_dt:
select itm_no, price, max(valid_to_dt) from (
select t.*,
row_number() over(partition by itm_no order by valid_from_dt, valid_to_dt) rn1
,row_number() over(partition by itm_no, price order by valid_from_dt, valid_to_dt) rn2
from price_tab t ) x group by itm_no, price, rn1-rn2 order by 1, 3;
但我无法找到一种方法来获取最大 valid_to_dt 并将其显示为具有 itm_no、价格和连续日期系列的所有行。有人可以指导我吗?
【问题讨论】:
-
请edit您的问题包括您的预期输出。
-
我对我的问题进行了编辑。添加了一个额外的列和另一个数据集。它基本上是相同的问题,但表有一个额外的列和新的数据场景。我应该发布一个新问题还是编辑上述问题?
-
好的,我会继续更新问题。如果有人想让我发新帖子,我会的。