否。Vertica不支持其普通SQL语法中的循环。
另请注意,SQL是一种描述性的,面向集合的,而不是过程语言,而这正是Vertica完全遵守的ANSI标准所基于的。
作为专门的大数据平台,Vertica优化其海量数据访问路径本身;和嵌套循环,因为它们来自您建议的过程,所以可以使用不同的策略来避免。
您可能会考虑编写用户定义的标量,转换或聚合函数。 Python,R,Java或C++中的标量;在R,Java或C++中转换;仅在C++中聚合。
但是为了解决您的问题,我会保持设置导向 - 并且只需在我的查询中创建一个集合(即内嵌表),然后使用CROSS JOIN将基本查询与该查询集合在一起。
Vertica的具有时间序列条款,您也可以用它来生成排出来的(几乎)没有......
像这样:
WITH
-- create a series of integers, call it "index" with column name "loopcounter"
-- replace 3 in "now() + 3 - 1" with your actual number of employees
index(loopcounter) AS (
SELECT row_number() OVER()
FROM (
SELECT 1
FROM (
SELECT now() AS se
UNION ALL SELECT now() + 3 - 1 AS se
) limits
TIMESERIES ts AS '1 day' OVER (ORDER BY se)
) tstab
)
SELECT
*
FROM payment
CROSS JOIN index
WHERE payment_date = '2017-05-11'
;
凡在[Vertica的手动](HTTPS: //my.vertica.com/docs/8.1.x/HTML/index.htm)你有没有找到这种语法? –
@a_horse_with_no_name在网上发现它并非在vertica手册中 –
除非您可以在手册中进行验证,否则您不应该信任“您在网上找到的内容”或者随机查找**明确**告诉您解决方案适用于Vertica(一般不只是“SQL”)。您可能发现了一些适用于SQL Server的内容,而不适用于Vertica。 –