我有一个要求,我需要返回到列的先前值,直到 1000 行,并获取之前的 1000 个日期以用于下一步,但是表中该列不存在所有这些先前的 1000 个日期。但我需要从查询的输出中获取那些缺失的日期。
当我尝试运行下面的查询时,它没有显示当前日期的 1000 个先前日期值。
示例:假设日期列只有 2 个可用日期
date
2019-01-16
2019-01-19
我提出了一个查询来获取 1000 个日期,但它只给出最近的日期,因为所有以前的日期都丢失了
SELECT date FROM table1 t
WHERE
date >= date_sub(current_date,1000) and dt<current_date ORDER BY date LIMIT 1
如果我运行上面的查询,它会显示2019-01-16
,由于不存在前 1000 天的回溯日期,因此给出了最近的日期,即2019-01-16
但我需要缺少从以下日期开始的日期2016-04-23
(从当前日期算起的第 1000 个日期)直到当前日期之前(2019-01-18
)作为我的查询的输出。
您可以在子查询中生成所需范围的日期(请参阅date_range
下面示例中的子查询)和left join
它与你的桌子。如果您的表中某些日期没有记录,则该值为空,日期将从date_range
没有间隙的子查询。放start_date
and end_date
date_range 所需参数:
set hivevar:start_date=2016-04-23; --replace with your start_date
set hivevar:end_date=current_date; --replace with your end_date
set hive.exec.parallel=true;
set hive.auto.convert.join=true; --this enables map-join
set hive.mapjoin.smalltable.filesize=25000000; --size of table to fit in memory
with date_range as
(--this query generates date range, check it's output
select date_add ('${hivevar:start_date}',s.i) as dt
from ( select posexplode(split(space(datediff('${hivevar:end_date}','${hivevar:start_date}')),' ')) as (i,x) ) s
)
select d.dt as date,
t.your_col --some value from your table on date
from date_range d
left join table1 t on d.dt=t.date
order by d.dt --order by dates if necessary
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)