我正尝试在Dbvisualizer中使用循环执行sql语句
--/
DECLARE @LoopCounter INT = 1, @MaxEmployeeId INT = 3
WHILE(@LoopCounter <= @MaxEmployeeId)
BEGIN
select * from payment
where payment_date='2017-05-11'
END;
/
可以在循环中运行语句,如果是,我如何为日期范围(从5月11日到5月15日)创建循环。注意:(--/和/在sql中假设为块)
发布于 2017-05-29 20:45:31
不是的。Vertica在其纯SQL语法中不支持循环。
另外:请记住,SQL是一种描述性的、面向集合的语言,而不是过程语言,这是Vertica完全遵守的ANSI标准的基础。
作为一个专业的大数据平台,Vertica本身优化了其海量数据访问路径;并且使用不同的策略避免了嵌套循环,因为它们是由您建议的过程产生的。
您可以考虑编写用户定义的标量、转换或聚合函数。Python、R、Java或C++中的标量;R、Java或C++中的转换;仅C++中的聚合。
但是为了解决你的问题,我仍然是面向集合的--只是在我的查询中创建一个集合(即一个内联表),并用它交叉连接基本查询。
Vertica有TIMESERIES子句,您也可以使用它来从(几乎)空中生成行……
如下所示:
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'
;
https://stackoverflow.com/questions/44234852
复制相似问题