【发布时间】:2018-03-20 13:28:38
【问题描述】:
我正在使用 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.ArrayIndexOutofBoundsException:
我还必须提到,结果存储在变量中的查询在独立使用时可以正常工作。
因此我有两个问题:
- 为什么整个代码都不起作用?
- 我怎样才能达到我想要的结果?
编辑:下面的 cmets 让我意识到我应该澄清我的意图:我想继续使用变量的原因是因为我打算之后对其执行一些简单的计算(例如,添加一天,创建一个循环等)。如果你们可以在不使用变量的情况下找到一个简单的解决方案,我也会很高兴:)
【问题讨论】:
-
能否将堆栈跟踪添加到查询中?
-
@LaurenzAlbe 恐怕我不知道它是什么以及如何获得它。
-
这是一长串方法名称,通常跟在 Java 中的错误消息后面。
-
为了找到更简单的解决方案,您需要提出您正在尝试解决的实际问题。可以使用 CTE 重新使用最大值。但显然这不是你想做的唯一事情
标签: postgresql variables dbeaver