Sql 旧/新记录的聚合查询问题

Sql 旧/新记录的聚合查询问题,sql,oracle,Sql,Oracle,在这种情况下,我的sql是生锈的,我有一个包含新旧记录的表,我试图将一个聚合查询放在一起,该查询基于从新值中减去旧值的总和来计算值。我不确定需要什么来让它工作,也许是一个小组 我编辑了这个并删除了一些冗余。我只是想得到列的行值与其他记录的一些列值之和的差值 SELECT 'key', 'NEW', NVL(n.MyFirstAmt,0) - SUM(NVL(o.MyFirstAmt,0)), NVL(n.MySecondAmt,0) - SUM(NVL(o.MySecondAmt,0

在这种情况下,我的sql是生锈的,我有一个包含新旧记录的表,我试图将一个聚合查询放在一起,该查询基于从新值中减去旧值的总和来计算值。我不确定需要什么来让它工作,也许是一个小组

我编辑了这个并删除了一些冗余。我只是想得到列的行值与其他记录的一些列值之和的差值

SELECT 'key',  
'NEW',  
NVL(n.MyFirstAmt,0) - SUM(NVL(o.MyFirstAmt,0)),  
NVL(n.MySecondAmt,0) - SUM(NVL(o.MySecondAmt,0)),    
SYSDATE,  
'MYUSER',  
SYSDATE,  
'MYUSER',  
o.SOME_COLUMN,  
FROM TABLE o, TABLE n  
WHERE o.id IN (1,2,3)  
AND n.id = 4
-分组依据???

您 可以尝试使用analyticover功能:

NVL(n.MyFirstAmt,0) - SUM(NVL(o.MyFirstAmt,0) over() )

这完全是在黑暗中拍摄的。。。在我看到select查询中的o.SOME_NO值之前,我认为我理解了这个问题-您对这些值的意图是什么

从表面上看,这似乎是您试图做的,但我真的很想知道如何从旧数据中传递一些字段

with old_data as (
  select
    sum (coalesce (MyFirstAmt, 0)) as MyFirstAmt,
    sum (coalesce (MySecondAmt, 0)) as MySecondAmt,
    sum (coalesce (MyThirdAmt, 0)) as MyThirdAmt,
    sum (coalesce (MyFourthAmt, 0)) as MyFourthAmt,
    sum (coalesce (MyFifthAmt, 0)) as MyFifthAmt
  from table
  where id in (4220621729,4201771785,4184084016)
)
select
  coalesce (n.MyFirstAmt, 0) - o.MyFirstAmt,
  coalesce (n.MySecondAmt, 0) - o.MySecondAmt,
  coalesce (n.MyThirdAmt, 0) - o.MyThirdAmt,
  coalesce (n.MyFourthAmt, 0) - o.MyFourthAmt,
  coalesce (n.MyFifthAmt, 0) - o.MyFifthAmt
from
  table n,
  old_data o
where
  n.id = 80002696860

另外,我假设这里的笛卡尔连接是有意的。由于子查询是单行,它似乎不会发出任何警告。

我建议您编辑您的问题,并提供示例数据和所需结果。