Vertica - 创建日历表

时间:2013-06-17 20:02:41

标签: sql date vertica analytic-functions

我在Vertica中遇到与填充日期不存在相关的问题。我在网上看过人们建议创建日历表的解决方案。 这是stackoverflow中的一个MYSQL问题。

有没有办法使用Vertica支持的SQL并且没有程序,使用另一个表中的min()和max()可用日期来创建日历表? 到目前为止,我遇到的大多数解决方案都基于T-SQL,并且使用过程生成日期。不幸的是,我的Vertica并没有那么多的PL / SQL或T-SQL能力。但有一些分析功能,我怀疑可以解决我的问题。

1 个答案:

答案 0 :(得分:3)

正如我在问题中所提到的,我现在正在回答这个问题,因为我找到了解决使用开始和结束日期创建日历表或视图的问题的解决方案。

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)

的日期列表