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



这是我的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
-

-小组再???

You可以尝试使用分析(结束)功能:

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

这是在黑暗中拍摄的总镜头... 我以为我理解了这个问题,直到我在选择查询中看到o.SOME_NO值 - 你对这些值的意图是什么?

从表面上看,这似乎是您要做的,但是对于如何从"旧"数据中交出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

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

最新更新