【发布时间】:2019-08-08 02:29:42
【问题描述】:
我正在尝试在 redshift 中实现相同的功能,但我发现要做到这一点并不困难。由于 redshift 位于 postgresql 引擎的顶部,如果有人可以在 postgresql 中做到这一点,那将非常有帮助。基本上,代码在列级别获取前两个月的计数。如果没有准确的上个月计数,则为 0。
这是我的代码:
with abc(dateval,cnt) as(
select 201908, 100 from dual union
select 201907, 200 from dual union
select 201906, 300 from dual union
select 201904, 600 from dual)
select dateval, cnt,
last_value(cnt) over (order by dateval
range between interval '1' month preceding
and interval '1' month preceding ) m1,
last_value(cnt) over (order by dateval
range between interval '2' month preceding
and interval '2' month preceding ) m2
from (select to_date(dateval, 'yyyymm') dateval, cnt from abc)
我在 over by 子句中出现错误。我试图给演员('1个月'作为间隔)但仍然失败。有人可以帮我解决这个 windows 功能吗?
预期输出:
问候
【问题讨论】:
-
请使用标签下方的
edit按钮编辑您的问题,并举例说明您在 PostgreSQL/Redshift 中的尝试。谢谢。 -
Redshifts 窗口函数不支持
RANGE,因此您只能定义基于行的窗口 (ROWS BETWEEN ...),这很可惜。由于您对过去 2 个月的值感兴趣,我将创建一个连续月份的序列表,然后使用月份创建一个序列表LEFT JOIN你的abc表以获取允许您使用行的连续日期范围基于窗口。然后你分别做LAG(cnt,1)和LAG(cnt,2)。 -
我会在我的电脑前给你举个例子
-
添加了输出@botchniaque