gpt4 book ai didi

sql - Vertica - 创建日历表

转载 作者:行者123 更新时间:2023-12-04 04:52:54 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

关于sql - Vertica - 创建日历表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17155805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com