Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
用于计算和并添加上一行的和的sql查询_Sql_Oracle_Oracle11g - Fatal编程技术网

用于计算和并添加上一行的和的sql查询

用于计算和并添加上一行的和的sql查询,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,这是我的桌子 dat_dt credit debit -------- ------ ----- 22-02-2019 10 5 25-02-2019 30 60 10-03-2019 50 40 13-03-2019 100 10 我想生成以下输出 max_date cr_sum progressive credit dr_sum pro

这是我的桌子

  dat_dt      credit     debit
 --------     ------     -----
22-02-2019      10         5
25-02-2019      30         60
10-03-2019      50         40
13-03-2019      100        10
我想生成以下输出

max_date    cr_sum    progressive credit  dr_sum progressive debit 
--------    ------    ------------------  ------  -----------------
25-02-2019    40            40              65           65
13-03-2019    150           190             50           115
我想计算每个月的贷方和借方之和,累进贷方是该月贷方和上个月累进贷方相加的列。累进借记也一样。max_date是每个月的最长日期。除了使用循环之外,还有什么简单的方法可以获得此输出吗?

您可以在下面尝试-

select max(dat_date) as max_date,sum(credit) as cr_sum,
       sum(credit) over(order by EXTRACT(month FROM dat_date),EXTRACT(year FROM dat_date)) as progressive_credit,
       sum(debit) as dr_sum,
       sum(debit) over(order by EXTRACT(month FROM dat_date),EXTRACT(year FROM dat_date)) as progressive_debit
group by EXTRACT(month FROM dat_date),EXTRACT(year FROM dat_date)

您似乎想要一个累积的总和,但按月份累计:

select max(dat_dt) as dat_dt,
       sum(credit) as credit,
       sum(sum(credit)) over (order by min(dat_dt)) as running_credit,
       sum(debit) as debit,
       sum(sum(debit)) over (order by min(dat_dt)) as running_debit
from t1
group by to_char(dat_dt, 'YYYY-MM')
order by min(dat_dt);

是一个dbfiddle。

您可以使用以下查询

with t1(  dat_dt, credit, debit) as
(
 select date'2019-02-22',10,  5 from dual union all
 select date'2019-02-25',30, 60 from dual union all
 select date'2019-03-10',50, 40 from dual union all
 select date'2019-03-13',100,10 from dual    
)
select max(dat_dt) as "max date",
       sum(credit) as "cr sum",
       sum(sum(credit)) over ( order by to_char(dat_dt,'yyyymm') ) as "progressive credit", 
       sum(debit) as "dr sum",
       sum(sum(debit))  over ( order by to_char(dat_dt,'yyyymm') ) as "progressive debit"
  from t1
 group by to_char(dat_dt,'yyyymm')
 order by to_char(dat_dt,'yyyymm');
按年-月组合进行聚合


它显示了一个错误-组函数也嵌套了deeply@Nidheesh . . . 代码运行良好。我加了一把小提琴。(事实上,我拼错了
dat_dt
,但这也是固定的。)我不太熟悉over(order by)查询,它似乎是正确的,但它没有显示GROUP by表达式。