我现在的问题是:目标是找到在第一次存款后30天内收到至少500美元存款的账户。一些帐户已被关闭并重新打开,因此“WHERE”子句的第一行。
select Deposits.accountNumber,
min(Deposits.transDate) as "first deposit",
Deposits.transDate,
CAST(DATEADD(d,30,min(Deposits.transDate)) as date) as "30 days",
sum(Deposits.amount) as "sum",
Deposits.amount,
Members.accountOpenDate
from Deposits
inner join Members on Deposits.accountNumber = members.accountNumber
where Deposits.transDate >= members.accountOpenDate
and Deposits.accountNumber = 123456
group by Deposits.accountNumber
having Deposits.transDate between min(Deposits.transDate) and DATEADD('d',30,min(Deposits.transDate))
and sum(Deposits.amount) >= 500我遇到的问题是HAVING语句的最后一行:
and sum(Deposits.amount) >= 500包括帐户的所有事务,就好像没有“HAVING”子句一样。它是在“拥有”的第一行中排除的交易中的保理:
having Deposits.transDate between min(Deposits.transDate) and DATEADD('d',30,min(Deposits.transDate))下面是我的数据(不按账号分组):
accountNumber amount sum
123456 $100 $6,500
123456 $50 $6,500
123456 $50 $6,500这就是我想要达到的目标:
accountNumber amount sum
123456 $100 $200
123456 $50 $200
123456 $50 $200提前谢谢。我的DBMS是Intersystems-Cache。他们的参考链接可以在Here上找到。
发布于 2017-12-29 06:50:23
您可以尝试这样的操作:
select filtered.accountNumber,
min(filtered.transDate) as "first deposit",
filtered.transDate,
CAST(DATEADD(d,30,min(filtered.transDate)) as date) as "30 days",
sum(filtered.amount) as "sum",
filtered.amount,
filtered.accountOpenDate
from
(
select * from Deposits
inner join Members on Deposits.accountNumber = members.accountNumber
where Deposits.transDate >= members.accountOpenDate
and Deposits.accountNumber = 123456
having Deposits.transDate between min(Deposits.transDate) and DATEADD('d',30,min(Deposits.transDate))
) as filtered
group by filtered.accountNumber
having sum(filtered.amount) >= 500对于这样的查询,您首先要应用transDate条件过滤数据,然后可以对金额的和进行过滤
发布于 2017-12-29 10:02:47
我们需要澄清: 1.您显示的3笔交易是否都在30天内?如果是,那么总金额不到500美元。所以,这个账号应该跳过。2.既然6500美元是所有交易的总和,为什么还要计算它?您只关心30天的窗口。
除此之外,我认为断开连接是HAVING子句中的日期计算。您在SELECT中使用MIN,但在HAVING中使用完全不同的聚合日期计算。我认为你应该把计算从拥有中去掉,让它成为WHERE的一部分。
当然,一旦你这样做了,你就必须去掉SELECT中的最小值。
https://stackoverflow.com/questions/48015287
复制相似问题