Oracle 尝试仅在具有max(date)的行上提取变量,同时对所有行上的不同变量求和
我需要从具有最大日期的行中提取一个值,同时对不同列的所有值求和 我的意思是这样的:Oracle 尝试仅在具有max(date)的行上提取变量,同时对所有行上的不同变量求和,oracle,aggregate-functions,Oracle,Aggregate Functions,我需要从具有最大日期的行中提取一个值,同时对不同列的所有值求和 我的意思是这样的: select a.account_number, a.client, a.referral_date, sum(b.amount), max(b.date), case when b.date = max(b.date) then b.due end as due from a join b on a.account_number = b.account_number group by a.account_n
select
a.account_number,
a.client,
a.referral_date,
sum(b.amount),
max(b.date),
case when b.date = max(b.date) then b.due end as due
from a join b on a.account_number = b.account_number
group by a.account_number, a.client, a.referral_date, sum(b.amount), max(b.date), case when b.date = max(b.date) then b.due end
如果这不合理,我很抱歉,但我正在尝试将所有“金额”相加,同时只从具有最大“日期”的行中获取“到期”
所以,如果我加入他们,只拉max(date),我将无法计算所有金额的总和
我一直在搜索这个问题,但坦率地说,我甚至不知道在搜索引擎中输入什么来回答这个问题。提前感谢您的帮助!让我知道如何进一步澄清
史蒂文:这不管用吗
select a.account_number
, a.client,
, a.referral_date
, sum(b.amount)
, case when b.date = max(b.date) then b.due end as due
from a join b
on a.account_number = b.account_number
group by a.account_number, a.client, a.referral_date
。。。如果您使用的是PL\SQL,则未经测试,但:
select account_number
, a.client
, a.referral_date
, sum(b.amount)
, max_date
from ( select a.account_number
, a.client,
, a.referral_date
, b.amount
, max(b.date) over ( partition by a.account_number, a.client, a.referral_date ) as max_date
from a join b
on a.account_number = b.account_number )
group by a.account_number, a.client, a.referral_date, max_date
这不管用吗:
select a.account_number
, a.client,
, a.referral_date
, sum(b.amount)
, case when b.date = max(b.date) then b.due end as due
from a join b
on a.account_number = b.account_number
group by a.account_number, a.client, a.referral_date
。。。如果您使用的是PL\SQL,则未经测试,但:
select account_number
, a.client
, a.referral_date
, sum(b.amount)
, max_date
from ( select a.account_number
, a.client,
, a.referral_date
, b.amount
, max(b.date) over ( partition by a.account_number, a.client, a.referral_date ) as max_date
from a join b
on a.account_number = b.account_number )
group by a.account_number, a.client, a.referral_date, max_date
我不确定我是否完全理解你的目标,但是这个怎么样:
SELECT account_number, client, referral_date, amount, due
FROM (SELECT a.account_number,a.client,a.referral_date, b.due, b.date TheDate
, SUM(b.amount) OVER (PARTITION BY b.account_number) amount
, MAX(b.date) OVER (PARTITION BY b.account_number) max_dt
FROM a JOIN b ON a.account_number = b.account_number)
WHERE TheDate = max_dt;
我不确定我是否完全理解你的目标,但是这个怎么样:
SELECT account_number, client, referral_date, amount, due
FROM (SELECT a.account_number,a.client,a.referral_date, b.due, b.date TheDate
, SUM(b.amount) OVER (PARTITION BY b.account_number) amount
, MAX(b.date) OVER (PARTITION BY b.account_number) max_dt
FROM a JOIN b ON a.account_number = b.account_number)
WHERE TheDate = max_dt;
抱歉,没有尝试实际编写SQL。。。您可以将每个部分作为一个单独的查询写入,然后使用“发件人”列表中的每个部分,然后加入以获得最后一行…使用一些示例数据会更清楚。很抱歉,没有尝试实际编写SQL。。。您可以通过将每个部分作为一个单独的查询来编写,然后使用FROM列表中的每个部分,然后连接以获得最后一行……使用一些示例数据会更清楚。