2

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

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

4

1 回答 1

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)列表

于 2013-06-17T23:46:11.393 回答