Amazon redshift 需要帮助以红移方式生成具有定义间隔的时间序列吗
我有一个表,有开始日期、结束日期和月份间隔。我需要根据添加间隔到开始日期生成序列 例如:Amazon redshift 需要帮助以红移方式生成具有定义间隔的时间序列吗,amazon-redshift,Amazon Redshift,我有一个表,有开始日期、结束日期和月份间隔。我需要根据添加间隔到开始日期生成序列 例如: 开始日期=2018年5月1日,结束日期=2019年12月31日,间隔时间=2 我正在寻找的系列(日期按行排列):2018年7月31日、2018年9月30日、2018年11月30日。。。19年11月30日 开始日期=2018年1月1日,结束日期=19年12月31日,间隔时间=3 我正在寻找的系列(日期按行排列):2018年3月31日、2018年6月30日、2018年9月30日、2018年12月31日……201
详细信息:我有3个连接的表(内部)。第一个表有开始日期,第二个表给我给定客户的结束日期,第三个表给我计费频率。基于这3个参数,我需要预测有多少发票以及我们将在什么日期向每个客户生成发票 问题还不是很清楚,但你可以试试这样的方法。只需插入开始日期、结束日期和间隔。它将为您提供您最想要的,然后您可以根据您的具体情况进行定制:
with series as (
select generate_series(1, datediff(month, <start_date>, <end_date>), 1) as n, MOD(n, <interval>) as remainder
)
select dateadd(month, n, <start_date>) from series where remainder = 0;
问题尚不清楚,但假设要求在开始日期和结束日期之间创建月结束日期,给定间隔为月 这种情况下的第一个示例不正确,它应该以
2018年6月1日
not2018年5月1日
我拥有的SQL是
WITH params(start_dt, end_date, interval_) AS
(SELECT '2018-06-01'::date,
'2019-12-31'::date,
'2'::integer)
, dates AS
(SELECT ADD_MONTHS(start_dt, n * interval_) - 1 AS dt
FROM params ,
(SELECT generate_series(1, ((datediff(month, start_dt::date, end_date::date) / interval_) + 1)) n
FROM params) )
SELECT to_char(dt,'MM/DD/YY') dt
FROM dates, params
WHERE dt BETWEEN start_dt AND end_date
此操作的输出为
dt
07/31/18
09/30/18
11/30/18
01/31/19
03/31/19
05/31/19
07/31/19
09/30/19
11/30/19
第二个例子
WITH params(start_dt, end_date, interval_) AS
(SELECT '2018-01-01'::date,
'2019-12-31'::date,
'3'::integer)
, dates AS
(SELECT ADD_MONTHS(start_dt, n * interval_) - 1 AS dt
FROM params ,
(SELECT generate_series(1, ((datediff(month, start_dt::date, end_date::date) / interval_) + 1)) n
FROM params) )
SELECT to_char(dt,'MM/DD/YY') dt
FROM dates, params
WHERE dt BETWEEN start_dt AND end_date
输出是
dt
03/31/18
06/30/18
09/30/18
12/31/18
03/31/19
06/30/19
09/30/19
12/31/19
请您澄清一下:您的系列是如何定义的?例如,“我需要在和之间生成每月第二个星期三的一系列日期”。另外:请向我们提供您迄今为止尝试的代码以及它提供的输出:)感谢脚本,但问题是在我添加基表以获取日期的那一刻,我得到了以下错误错误:0A000:红移表不支持指定的类型或函数(每个信息消息一个)。Redshift不允许使用任何其他表生成_系列我在Redshift上运行了该查询,它对我有效。如果您试图使用它创建一个表,那么它失败了(我不知道为什么,可能是红移设置的一些限制),尽管我在连接到其他表时没有问题。
dt
03/31/18
06/30/18
09/30/18
12/31/18
03/31/19
06/30/19
09/30/19
12/31/19