sql - 添加缺少的每月行
问题描述
例如,我想列出请求中两个日期之间的缺失日期
我的数据:
YEAR_MONTH | AMOUNT
202001 | 500
202001 | 600
201912 | 100
201910 | 200
201910 | 100
201909 | 400
201601 | 5000
我希望请求返回
201912 | 100
201911 | 0
201910 | 300
201909 | 400
201908 | 0
201907 | 0
201906 | 0
.... | 0
201712 | 0
我想要从执行之日起的最后 24 个月
我对日期做了类似的事情,但不是 YEAR MONTHyyyyMM
select date_sub(s.date_order ,nvl(d.i,0)) as date_order, case when d.i > 0 then 0 else s.amount end as amount
from
(--find previous date
select date_order, amount,
lag(date_order) over(order by date_order) prev_date,
datediff(date_order,lag(date_order) over(order by date_order)) datdiff
from
( --aggregate
select date_order, sum(amount) amount from your_data group by date_order )s
)s
--generate rows
lateral view outer posexplode(split(space(s.datdiff-1),' ')) d as i,x
order by date_order;
我将 Cassandra 数据库与 Apache Hive 连接器一起使用
有人能帮我吗 ?
解决方案
date_range
子查询从当前日期生成 24 个月(如果您想要 24 个月以外的范围,请调整)。将其与您的数据集左连接,请参阅此演示代码中的注释:
with date_range as
(--this query generates months range, check it's output
select date_format(add_months(concat(date_format(current_date,'yyyy-MM'),'-01'),-s.i),'yyyyMM') as year_month
from ( select posexplode(split(space(24),' ')) as (i,x) ) s --24 months
),
your_data as (--use your table instead of this example
select stack(7,
202001, 500,
202001, 600,
201912, 100,
201910, 200,
201910, 100,
201909, 400,
201601,5000 -----this date is beyond 24 months, hence it is not in the output
) as (YEAR_MONTH, AMOUNT )
)
select d.year_month, sum(nvl(s.amount,0)) as amount --aggregate
from date_range d
left join your_data s on d.year_month=s.year_month
group by d.year_month;
结果:
d.year_month amount
201801 0
201802 0
201803 0
201804 0
201805 0
201806 0
201807 0
201808 0
201809 0
201810 0
201811 0
201812 0
201901 0
201902 0
201903 0
201904 0
201905 0
201906 0
201907 0
201908 0
201909 400
201910 300
201911 0
201912 100
202001 1100
使用您的表代替 your_data 子查询。order by
必要时添加。
推荐阅读
- puppet - 错误:无法从远程服务器检索目录:服务器上的错误 500:
- python - 当我使用并行选项进行 django 测试时如何迁移模型?
- ruby-on-rails - 如何在不禁用 ssl 的情况下抓取网站
- excel - 打开 Excel 时 ActiveSheet 和 ActiveWorkbook 为空
- android - 无法在 ViewModel 中的 Intent 中添加额外内容
- python - Python中熊猫数据框的邻接矩阵
- python - 我可以在我的 Windows 子系统 Linux (WSL) 上使用我的 Windows 10 的 Python 或 Conda 环境吗?
- typescript - React Native Navigation - 带有覆盖的嵌套导航器
- python - 覆盖 Django ModelForm 保存方法并删除旧值(文件)
- java - 我有一个已经选择了一些行的表,根据文本过滤器过滤这个表,并且应该使用 java 包含已经选择的行