我在Vertica中有一个与不存在的填充日期相关的问题。我在网上看到了一些解决方案,人们建议创建一个日历表。下面是一个来自stackoverflow的MYSQL问题。
是否有一种方法来创建一个日历表使用min()和max()可用日期从另一个表使用SQL支持的Vertica和没有过程?到目前为止,我遇到的大多数解决方案都是基于T-SQL的,并且使用过程生成日期。不幸的是,I Vertica并没有那么多PL/SQL或T-SQL的能力。但有一些分析功能,我怀疑可能能够解决我的问题。
正如我在问题中提到的,我现在回答这个问题,因为我已经找到了使用开始和结束日期创建日历表或视图的问题的解决方案。
CREATE table mytest.calendar
(
date DATE primary key
);
在日历表中插入边界日期(您想要的表中的最小和最大日期)。
Insert into mytest.calendar (select min(date) from mytest.benchmarks);
Insert into mytest.calendar (select max(date) from mytest.benchmarks);
现在要生成中间日期,请执行以下操作:
SELECT CAST(slice_time AS DATE) date
FROM mytest.calendar mtc
TIMESERIES slice_time as '1 day'
OVER (ORDER BY CAST(mtc.date as TIMESTAMP));
你可以使用它作为一个单独的表:
SELECT date from
(SELECT CAST(slice_time AS DATE) date
FROM mytest.calendar mtc
TIMESERIES slice_time as '1 day'
OVER (ORDER BY CAST(mtc.date as TIMESTAMP))) calendar
where mytest.isBusinessDay(date) = 't';
SELECT date
FROM
(SELECT date
FROM
(SELECT CAST(slice_time AS DATE) date
FROM mytest.calendar mtc
TIMESERIES slice_time as '1 day'
OVER (ORDER BY CAST(mtc.date as TIMESTAMP))
) calendar
WHERE mytest.isBusinessDay(date) = 't') calendar;
我有我的日期列表,从开始日期(这是min(date)
从基准表)到结束日期(这是max(date)
)