首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Dbvisualizeer中使用循环和sql (数据库Vertica)

在Dbvisualizeer中使用循环和sql (数据库Vertica)
EN

Stack Overflow用户
提问于 2017-05-29 12:55:54
回答 1查看 2.4K关注 0票数 0

我正尝试在Dbvisualizer中使用循环执行sql语句

代码语言:javascript
运行
复制
--/
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中假设为块)

EN

回答 1

Stack Overflow用户

发布于 2017-05-29 20:45:31

不是的。Vertica在其纯SQL语法中不支持循环。

另外:请记住,SQL是一种描述性的、面向集合的语言,而不是过程语言,这是Vertica完全遵守的ANSI标准的基础。

作为一个专业的大数据平台,Vertica本身优化了其海量数据访问路径;并且使用不同的策略避免了嵌套循环,因为它们是由您建议的过程产生的。

您可以考虑编写用户定义的标量、转换或聚合函数。Python、R、Java或C++中的标量;R、Java或C++中的转换;仅C++中的聚合。

但是为了解决你的问题,我仍然是面向集合的--只是在我的查询中创建一个集合(即一个内联表),并用它交叉连接基本查询。

Vertica有TIMESERIES子句,您也可以使用它来从(几乎)空中生成行……

如下所示:

代码语言:javascript
运行
复制
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'
;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44234852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档