日期 Netezza 的递归 CTE SQL
Recursive CTE of Dates Netezza SQL
我在 SQL 服务器上 运行 有以下代码 - 它 returns 每个月最后一天的 table 个季度日期,从用户定义的第一次约会。我需要在 Netezza SQL:
中实现代码
DECLARE @YEAR INT= 2014 /*year of first date*/
DECLARE @MONTH INT = 6 /*month of first date*/
DECLARE @DAY INT = 30 /*day of first date*/
;WITH MONTHS (DATES) AS
(select DATEFROMPARTS(@year,@month,@day)
union all
SELECT cast(DATEADD(dd,-1,DATEADD(mm, DATEDIFF(m,0,dateadd(month,3,dates))+1,0)) as date)
FROM MONTHS
WHERE DATES < dateadd(month,12,datefromparts(@year,@month,@day))
)
SELECT * FROM MONTHS
我在尝试弄清楚如何将其转换为 Netezza SQL 时遇到了麻烦。示例代码的输出如下所示:
> DATES
> 2014-06-30
> 2014-09-30
> 2014-12-31
> 2015-03-31
> 2015-06-30
Netezza 目前不支持递归 CTE,因此这里有一个替代方案,希望能满足您的需求。此处使用 CTE 完全是无偿的,它代表您在 MS SQL 代码中使用的变量声明。
with starting_date(start_date) as
(
select '2014-06-30'::date
)
select last_day(add_months(date_trunc('month', start_date), idx*3 )) qtr_date
from starting_date
cross join _v_vector_idx
where qtr_date <= add_months(start_date,12)
-- where idx < 5
order by qtr_date ;
QTR_DATE
------------
2014-06-30
2014-09-30
2014-12-31
2015-03-31
2015-06-30
(5 rows)
where 子句的注释版本会更有效,但我使用了另一个版本以更接近您的原始版本。
我在 SQL 服务器上 运行 有以下代码 - 它 returns 每个月最后一天的 table 个季度日期,从用户定义的第一次约会。我需要在 Netezza SQL:
中实现代码 DECLARE @YEAR INT= 2014 /*year of first date*/
DECLARE @MONTH INT = 6 /*month of first date*/
DECLARE @DAY INT = 30 /*day of first date*/
;WITH MONTHS (DATES) AS
(select DATEFROMPARTS(@year,@month,@day)
union all
SELECT cast(DATEADD(dd,-1,DATEADD(mm, DATEDIFF(m,0,dateadd(month,3,dates))+1,0)) as date)
FROM MONTHS
WHERE DATES < dateadd(month,12,datefromparts(@year,@month,@day))
)
SELECT * FROM MONTHS
我在尝试弄清楚如何将其转换为 Netezza SQL 时遇到了麻烦。示例代码的输出如下所示:
> DATES
> 2014-06-30
> 2014-09-30
> 2014-12-31
> 2015-03-31
> 2015-06-30
Netezza 目前不支持递归 CTE,因此这里有一个替代方案,希望能满足您的需求。此处使用 CTE 完全是无偿的,它代表您在 MS SQL 代码中使用的变量声明。
with starting_date(start_date) as
(
select '2014-06-30'::date
)
select last_day(add_months(date_trunc('month', start_date), idx*3 )) qtr_date
from starting_date
cross join _v_vector_idx
where qtr_date <= add_months(start_date,12)
-- where idx < 5
order by qtr_date ;
QTR_DATE
------------
2014-06-30
2014-09-30
2014-12-31
2015-03-31
2015-06-30
(5 rows)
where 子句的注释版本会更有效,但我使用了另一个版本以更接近您的原始版本。