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

我有一个表,有开始日期、结束日期和月份间隔。我需要根据添加间隔到开始日期生成序列

例如:

  • 开始日期=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日……2018年12月21日


    详细信息:我有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日
    not
    2018年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