我想使用表中某个值的max作为生成的系列的最大值,以获得没有孔的表。我试过了
SELECT n
FROM (SELECT MAX(amount) as max FROM my_table) h,
generate_series(1,h.max,1) n
以及
SELECT *
FROM generate_series(1,10,1) n
RIGHT JOIN (SELECT MAX(amount) AS max FROM my_table) h ON h.max > n
生成以下错误
java.lang.RuntimeException: com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: Specified types or functions (one per INFO message) not supported on Redshift tables.;
我尝试在关闭时准备最大值,我尝试在关闭时准备generate_series但没有任何工作。我总是遇到同样的错误。
答案 0 :(得分:1)
因为我引用了文档,这对于评论来说太长了。
Amazon Redshift不支持generate_series()
:
Amazon Redshift不支持这些PostgreSQL功能。
设置返回功能
- GENERATE_SERIES()
- GENERATE_SUBSCRIPTS()
这使您在Redshift中难以解决的问题比您预期的要困难。我建议您提出另一个问题,并提供有关如何使用数据的更多详细信息。例如:
答案 1 :(得分:1)
使用讨论 generate_series() method fails in Redshift 我为我的具体问题找到了解决方案。我首先创建一个足够大的范围(这可能在将来会出现问题,任何更好的解决方案都非常受欢迎)。然后我加上这个范围,我的最大值是范围值小于我的最大值。
with
range as (
select (row_number() over (order by true)) as num
from [some_big_enough_table] limit 30
)
SELECT num FROM range INNER JOIN (SELECT MAX(amount) m FROM my_table) h
WHERE num <= m
答案 2 :(得分:0)
你是否试图用你所拥有的东西来设定一个任意限制的范围?这样的事情可能有用:
with range as (
select num from (
select row_number() over (order by true) as num
from [large_table]
limit 30 -- some reasonable upper limit
) where num < (select max(amount) m from my_table)+1
)
对于零基础,只需从num:select num-1 as num from