例如,我想在请求中列出两个日期之间缺少的日期
我的数据:
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个月
我做了一些类似的日期,但不是年-月 yyyyMM
```
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;
我使用带有apache配置单元连接器的cassandra数据库
有人能帮我吗?
2条答案
按热度按时间wnavrhmk1#
date_range
子查询从当前日期返回24个月(如果需要24个月范围以外的时间,请进行调整)。左键将其与数据集连接起来,请参见此演示代码中的注解:结果:
使用表代替\u数据子查询。添加
order by
如有必要。gcxthw6b2#
所以如果我理解正确的话,你想添加所有当前丢失的日期,因为它发生了
amount
这几天是0。您可以使用:
这基本上创建了一个1970年到2200年之间的日期列表(筛选出您感兴趣的日期)。
想法是从中选择作为子查询,并与当前表(在日期字段上)连接。
示例:为不存在的数据返回空行
至于日期格式(年-月-yyyymm),您可以运行以下命令: