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