Vertica - 在实际查询中无法识别 WITH 子句
Vertica - WITH clause is not recognized in actual query
请查看以下 Vertica SQL 代码:
WITH date_range AS
(SELECT YEAR(now() - interval '1' MONTH) ||MONTH(now() - interval '1' MONTH) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm')) ||'#'||DATE(TRUNC(now(), 'mm') - interval '1' DAY) AS month1
, YEAR(now() - interval '2' MONTH) ||MONTH(now() - interval '2' MONTH) ||'#'||DATE(TRUNC(now() - interval '2' MONTH, 'mm')) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm') - interval '1' DAY) AS month2
)
SELECT regexp_substr(
(SELECT month1
FROM date_range), '[^#]*', 1, 1)
我有一个 420 行长的查询,我需要在我的代码中多次使用 "month1" 和 "month2" 作为变量。不幸的是,Vertica 仍然不支持变量,因此我尝试改用 WITH 子句。
不幸的是,它不起作用,因为我不断收到以下错误消息:
(4566) ERROR: Relation "date_range" does not exist
所以上帝(或 Stack Overflow)帮助我
我认为这是你想要的查询:
WITH date_range AS (
SELECT YEAR(now() - interval '1' MONTH) ||MONTH(now() - interval '1' MONTH) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm')) ||'#'||DATE(TRUNC(now(), 'mm') - interval '1' DAY) AS month1,
YEAR(now() - interval '2' MONTH) ||MONTH(now() - interval '2' MONTH) ||'#'||DATE(TRUNC(now() - interval '2' MONTH, 'mm')) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm') - interval '1' DAY) AS month2
)
SELECT regexp_substr(month1, '[^#]*', 1, 1)
FROM date_range;
在实际查询中,您可以这样做:
SELECT regexp_substr(dr.month1, '[^#]*', 1, 1)
FROM date_range dr CROSS JOIN
. . .;
我经常将此类 CTE 称为 params
以强调它们正在为查询提供参数。
请查看以下 Vertica SQL 代码:
WITH date_range AS
(SELECT YEAR(now() - interval '1' MONTH) ||MONTH(now() - interval '1' MONTH) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm')) ||'#'||DATE(TRUNC(now(), 'mm') - interval '1' DAY) AS month1
, YEAR(now() - interval '2' MONTH) ||MONTH(now() - interval '2' MONTH) ||'#'||DATE(TRUNC(now() - interval '2' MONTH, 'mm')) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm') - interval '1' DAY) AS month2
)
SELECT regexp_substr(
(SELECT month1
FROM date_range), '[^#]*', 1, 1)
我有一个 420 行长的查询,我需要在我的代码中多次使用 "month1" 和 "month2" 作为变量。不幸的是,Vertica 仍然不支持变量,因此我尝试改用 WITH 子句。 不幸的是,它不起作用,因为我不断收到以下错误消息:
(4566) ERROR: Relation "date_range" does not exist
所以上帝(或 Stack Overflow)帮助我
我认为这是你想要的查询:
WITH date_range AS (
SELECT YEAR(now() - interval '1' MONTH) ||MONTH(now() - interval '1' MONTH) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm')) ||'#'||DATE(TRUNC(now(), 'mm') - interval '1' DAY) AS month1,
YEAR(now() - interval '2' MONTH) ||MONTH(now() - interval '2' MONTH) ||'#'||DATE(TRUNC(now() - interval '2' MONTH, 'mm')) ||'#'||DATE(TRUNC(now() - interval '1' MONTH, 'mm') - interval '1' DAY) AS month2
)
SELECT regexp_substr(month1, '[^#]*', 1, 1)
FROM date_range;
在实际查询中,您可以这样做:
SELECT regexp_substr(dr.month1, '[^#]*', 1, 1)
FROM date_range dr CROSS JOIN
. . .;
我经常将此类 CTE 称为 params
以强调它们正在为查询提供参数。