我对SQL(Oracle SQL,如果它有作用的话)是新手,但碰巧我不得不使用它。我需要按一些关键字段(CustID、AppID)聚合数据。我还有一些AppDate、PDate和Amount t.Initial data我需要做的是聚合,但对于每个键字段组合,我需要在以下条件下聚合来自其他行的数据:
- CustID=CustID,也就是只接受此客户ID的信息
- appid!=appid aka只接受与当前应用程序不同的信息。
- AppDate>=PDate也就是只获取申请时可用的信息
通过对SQL语言的快速了解,我的方法是使用:
select CustId, AppId, Sum(case when
custid=custid and Appid!=Appid and AppDate >= PDate then Amount else 0 end) as SumAmount
From Table
Group by CustId AppId
不幸的是,我得到的SumAmount结果都是0。我猜这是因为最后两个条件。我希望从示例表中获得的结果是:Results此外,我可能会添加条件,即AppDate-AppDate的其他AppID>6个月的AppDate将那些从聚合金额中排除。
另外,我真的很抱歉格式不达标,可能还有错误的代码。我对如何做这件事并不是很有经验。
编辑:我找到了如下解决方案:
select distinct a.CustId, a.AppId, a.AppDate, b.PDate, b.Amount
from table a
inner join (select CustId, AppId, Amount, PDate from Table) b
on a.CustId = b.CustId and a.AppId != b.AppId
where a.AppDate >= b.PDate
在此之后,我通过AppID将金额相加来进行汇总。基本上,我只是根据条件追加相同的信息,因为我得到了许多完全重复的副本,所以我使用DISTINCT进行重复数据消除。
1条答案
按热度按时间bogh5gae1#
我找到了如下解决方案:
在此之后,我通过AppID将金额相加来进行汇总。基本上,我只是根据条件追加相同的信息,因为我得到了许多完全重复的副本,所以我使用DISTINCT进行重复数据消除。