select G.*
from
(select T.dt,sum(case when T2.mdt>=T.dt then 1 else 0 end) np
from
(select left(erdat,6) dt,matnr
from SAPHANADB.vbap
where mandt=800
group by left(erdat,6),matnr) T
left join (
select matnr,min(left(erdat,6)) mdt
from SAPHANADB.vbap
where mandt=800 group by matnr
) T2 on T.matnr=T2.matnr
group by T.dt) G
order by G.dt desc
matnr物料号 erdat带有年月日的时间
直接上代码
想要做什么:取出第一次matnr第一次出现在企业中时间,以及月份,和以后新增的matnr出现不重复,并不断计算新增的matnr出现的次数,最后按照月份进行分组
解题思路:
第一步:首先取出日期的年月,以及想要的物料号,并且做一个物料号,和月份的分组,这个时候会得到一个有重复月份,不同物料的数据,但是我们想要的并不是这样的。而是物料首次出现的时间
第二步:取出每个物料号出现的最小时间,和物料号,最后按照物料号分组
第三步:二张子查询构成的表之间做一个左链接,精华部分,按照第一张表所求得的月份进行分组。分组发生在查询的前面,这里求出月份
第四步:利用case when做了一个条件判断。如果,最小的物料时间段大于里面中的一个,记作一个,做了一个新增计数
第五步:主表构建完成,取出全部数据。做一个排序