Postgres:将查询结果存储到变量中,并在另一个查询中使用该变量

时间:2018-03-20 13:28:38

标签: postgresql variables dbeaver

我正在使用PostgreSQL 9.6,其查询大致如下所示:

DO $$
DECLARE max_sales_date DATE ;
BEGIN

max_sales_date :=

select sales_date::date 
from (
     select count(sales_date::date)
        , sales_date::date
        , row_number() over (order by count(sales_date::date) desc) as rn 
     from Sales
     group by sales_date::date
     ) a where a.rn = 1 ;

select *
from Sales
where sales_date = max_sales_date ;

END $$ ;

正如您所看到的,我希望获得销售数量最多的一天,将其存储在变量中并在另一个查询中使用它。我知道在这种情况下不需要变量,但我需要这个用于尚未开始开发的另一个步骤。

DBeaver 5.0很遗憾地抛出以下错误消息:

  

内部jdbc驱动程序错误

     

java.lang.ArrayIndexOutofBoundsExcception:

我还必须提到结果存储在变量中的查询在独立使用时工作正常。

因此我有两个问题:

  1. 为什么整个代码都不起作用?
  2. 我如何达到我想要的结果?
  3. 编辑:以下评论让我意识到我应该澄清我的意图:我之所以要继续使用变量,是因为我计划在之后对其执行一些简单的计算(例如,添加一天,创建一个循环等)。如果你们可以在不使用变量的情况下找到一个简单的解决方案,我也很高兴:)

1 个答案:

答案 0 :(得分:-1)

你可以使用select ... into pattern,你不能选择"选择*"在DO函数中查询 - 它不是要返回查询。

DO $$
DECLARE max_sales_date DATE ;
declare sale record;
BEGIN

select sales_date into max_sales_date  from 
(select sales_date from (select count(sales_date) as cnt, sales_date::date 
    from Sales group by sales_date) as dt order by cnt desc limit 1) as ct;

for sale in select * from Sales where sales_date = max_sales_date
loop
-- do whatever is needed with this data
end loop;

END $$ ;