Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 尝试仅在具有max(date)的行上提取变量,同时对所有行上的不同变量求和_Oracle_Aggregate Functions - Fatal编程技术网

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列表中的每个部分,然后连接以获得最后一行……使用一些示例数据会更清楚。