Sql 使用Teradata创建具有设置行数的空输出表

Sql 使用Teradata创建具有设置行数的空输出表,sql,teradata,Sql,Teradata,我知道如何使用SAS之类的工具实现这一点,但如果我想创建一个表,该表的行数与从该语句派生的月间隔数相同: cast((cast(2017-03-31 as date) - cast(2016-01-31 as date) month(4)) as int) as date_range ..给出如下输出: 2017-03-31 2017-02-28 2017-01-31 2017-12-31 2017-11-30 2017-10-31 2017-09-30 2017-08-31 2017-07-

我知道如何使用SAS之类的工具实现这一点,但如果我想创建一个表,该表的行数与从该语句派生的月间隔数相同:

cast((cast(2017-03-31 as date) - cast(2016-01-31 as date) month(4)) as int) as date_range
..给出如下输出:

2017-03-31
2017-02-28
2017-01-31
2017-12-31
2017-11-30
2017-10-31
2017-09-30
2017-08-31
2017-07-31
2017-06-30
2017-05-31
2017-04-30
在Teradata中执行此操作需要什么语句


感谢您

如果您从“2016-02-29”开始,您将获得接下来的第29个月,那么在月的最后一天添加月数可能会有问题,因此获得月的第一天会更安全

您可以使用递归cte执行任何操作:

with recursive cte(dte) as (
        select cast('2016-02-01' as date)
        union all
        select add_months(cte.dte, 1)
        from cte
        where dte <= '2017-05-01'
    ),
    dates as (
        select dte - interval '1 day'
        from cte
    )
. . .

得到月的第一天更安全,因为在月的最后一天加上月份可能会有问题,如果你从“2016-02-29”开始,你会得到接下来的第29个月

您可以使用递归cte执行任何操作:

with recursive cte(dte) as (
        select cast('2016-02-01' as date)
        union all
        select add_months(cte.dte, 1)
        from cte
        where dte <= '2017-05-01'
    ),
    dates as (
        select dte - interval '1 day'
        from cte
    )
. . .

这些日期是根据现有列计算的吗

还是你只需要那张单子

在这两种情况下,您都可以使用Teradata专有的扩展功能:


这些日期是根据现有列计算的吗

还是你只需要那张单子

在这两种情况下,您都可以使用Teradata专有的扩展功能:


嗨,谢谢你的回复。在这个例子中,“cte”和“dte”代表什么?@gdogg371。cte是递归cte的名称。dte是该cte的日期列的名称。您好,谢谢回复。在这个例子中,“cte”和“dte”代表什么?@gdogg371。cte是递归cte的名称。dte是该cte的日期列的名称。您好,谢谢回复。老实说,我还没有决定如何最好地做到这一点,但我的值确实需要来自另一个数据集。我真的不知道如何将上面示例中的递归逻辑应用到我的场景中,因为我不是100%的cte和dte应该代表什么…@gdogg371:正如Gordon所写,cte是递归查询的别名,dte是日期列的别名。如果数据来自您最好使用EXPAND的表/结果,那么语法并不常用,大多数人都不知道。在我第一次使用时,将此标记为正确答案,但我认为它们都可以满足我的需要……不过“with recursive”的语法对我来说有点陌生,所以我们必须继续玩这个。谢谢你的帮助。嗨,谢谢你的回复。老实说,我还没有决定如何最好地做到这一点,但我的值确实需要来自另一个数据集。我真的不知道如何将上面示例中的递归逻辑应用到我的场景中,因为我不是100%的cte和dte应该代表什么…@gdogg371:正如Gordon所写,cte是递归查询的别名,dte是日期列的别名。如果数据来自您最好使用EXPAND的表/结果,那么语法并不常用,大多数人都不知道。在我第一次使用时,将此标记为正确答案,但我认为它们都可以满足我的需要……不过“with recursive”的语法对我来说有点陌生,所以我们必须继续玩这个。谢谢您的帮助。为什么不直接查询系统日历表视图?您尝试了什么?你真的想根据过去的月数计算未来的月数吗?为什么不直接查询系统日历表视图?你尝试了什么?根据过去的月数,你真的想要未来的月数吗?