无 ID 关系的分层数据的 SUM 和 COUNT

SUM and COUNT for kind of hierarchical data without ID relationship

我有一个 table,其中包含商品、year/month 格式的日期以及在特定月份和年份售出的每件商品的金额。

有几个项目,但其中一些项目之间也有关系。 具有关系的项目具有相同的 3 个字符 示例:101 是基本版本中的项目 1,后来市场上出现了新版本 101AA 和后来仍在市场上的 101AB = yearmonth 202102。 并不总是该项目需要带有基本版本(仅 3 个字符),但它可以从最高的开始 = 项目 200A。后来出现了新版本 200AC 和后来的 200DD,如您所见,到目前为止市场上可能同时有 2 个版本。

我需要的是显示特定商品的第一个版本,在市场上花费的总月数(所有版本一起)以​​及仅那些仍然存在于 [=20= 上的商品的总金额(所有版本一起) ] 有点像分层查询,部门经理在上面,员工+他们所有的薪水。 最后一件400AA在2020年12月售罄,不符合条件

所需的输出应如下所示。

Item       months      total
101         26          260
200A        11          175




create table items (
yearmonth varchar2(6),
item_code varchar2(12),
amount number        );

insert into items values ( '201901' , '101' , 10 );
insert into items values ( '201902' , '101' , 10 );
insert into items values ( '201903' , '101' , 10 );
insert into items values ( '201904' , '101' , 10 );
insert into items values ( '201905' , '101' , 10 );
insert into items values ( '201906' , '101' , 10 );
insert into items values ( '201907' , '101' , 10 );
insert into items values ( '201908' , '101' , 10 );
insert into items values ( '201909' , '101' , 10 );
insert into items values ( '201910' , '101' , 10 );
insert into items values ( '201911' , '101' , 10 );
insert into items values ( '201912' , '101' , 10 );
insert into items values ( '202001' , '101' , 10 );
insert into items values ( '202002' , '101' , 10 );
insert into items values ( '202003' , '101' , 10 );
insert into items values ( '202004' , '101AA' , 10 );
insert into items values ( '202005' , '101AA' , 10 );
insert into items values ( '202006' , '101AA' , 10 );
insert into items values ( '202007' , '101AA' , 10 );
insert into items values ( '202008' , '101AA' , 10 );
insert into items values ( '202009' , '101AA' , 10 );
insert into items values ( '202010' , '101AA' , 10 );
insert into items values ( '202011' , '101AB' , 10 );
insert into items values ( '202012' , '101AB' , 10 );
insert into items values ( '202101' , '101AB' , 10 );
insert into items values ( '202102' , '101AB' , 10 );
insert into items values ( '202004' , '200A' , 5 );
insert into items values ( '202005' , '200A' , 5 );
insert into items values ( '202006' , '200A' , 5 );
insert into items values ( '202007' , '200A' , 5 );
insert into items values ( '202008' , '200AC' , 10 );
insert into items values ( '202009' , '200AC' , 10 );
insert into items values ( '202010' , '200AC' , 10 );
insert into items values ( '202011' , '200AC' , 10 );
insert into items values ( '202011' , '200DD' , 10 );
insert into items values ( '202012' , '200AC' , 10 );
insert into items values ( '202012' , '200DD' , 25 );
insert into items values ( '202101' , '200AC' , 10 );
insert into items values ( '202101' , '200DD' , 25 );
insert into items values ( '202102' , '200AC' , 10 );
insert into items values ( '202102' , '200DD' , 25 );
insert into items values ( '202011' , '400' , 50 );
insert into items values ( '202011' , '400AA' , 10 );
insert into items values ( '202012' , '400AA' , 50 );
insert into items values ( '202012' , '400AA' , 25 );

基于以上数据,不需要使用层级查询,可以使用下面sql:

select ITEM_CODE_First,count(distinct YEARMONTH), sum(amount) total from(
select YEARMONTH,max(YEARMONTH)over (partition by substr(item_code,1,3)) as YEARMONTH_LAST,
ITEM_CODE, min(ITEM_CODE) over (partition by substr(item_code,1,3)) as ITEM_CODE_First,amount from items)
where YEARMONTH_LAST = 202102
group by ITEM_CODE_First;