rows between unbounded preceding and current row,滚动统计数据

文章描述了一个数据库操作的需求,旨在将缺少数据的月份在收入表中补全。通过创建基础表和辅助表,插入测试数据,然后编写SQL查询,利用窗口函数`rowsbetweenunboundedprecedingandcurrentrow`进行滚动统计,将缺失月份的收入金额填充或者合并。最终实现了从2023年1月到12月完整的数据记录。
摘要由CSDN通过智能技术生成

记录一个需求:基础数据为两个字段,表中只有两条数据,目的是想要将其他年月的数据补齐,补齐方式为:2月无数据就把1月的金额拿过来,以此类推,到了6月本身有一条数据,那么就将5月和6月的金额加起来存到6月的数据中,下面用图表说明一下

收入表:

ny(年月)srje(收入金额)
202301100
202306100

期望的结果表:

ny(年月)srje(收入金额)
202301100
202302100

202303

100
202304100
202305100
202306200
202307200
202308200
202309200
202310200
202311200
202312200

接下实现:

1、构建基础表与辅助表

CREATE TABLE IF NOT EXISTS `JE`(
    `ny` string COMMENT'年月',
    `srje` string COMMENT'收入金额'
	 )comment'测试'partitioned by(
    pt string
 )stored as parquet 
 lifecycle 7;
--创建月份表
 CREATE TABLE IF NOT EXISTS `NF`(
    `ny` string COMMENT'年月'
	 )comment'年月表'partitioned by(
    pt string
 )stored as parquet 
 lifecycle 7;

2、构建测试数据

insert into JE values ('202306','100');
insert into JE values ('202301','100');

insert into NF values ('202301');
insert into NF values ('202302');
insert into NF values ('202303');
insert into NF values ('202304');
insert into NF values ('202305');
insert into NF values ('202306');
insert into NF values ('202307');
insert into NF values ('202308');
insert into NF values ('202309');
insert into NF values ('202310');
insert into NF values ('202311');
insert into NF values ('202312');

3、写SQL

select 
    t2.ny,
    sum(t1.srje) over ( order by t2.ny rows between unbounded preceding and current row) 
from Nf t2 
left join  JE t1 
on t1.ny = t2.ny 
order by t2.ny;

4、看数据,实现了这个效果

 

 在这个中最主要的就是rows between unbounded preceding and current row,滚动统计
详情可以查一下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值