我想在使用
lag()
定义的分区上使用 RANGE BETWEEN
获取先前的值。我按照文档中的示例:
WITH orders (custkey, orderdate, totalprice)
AS
(
VALUES
('cust_1', DATE '2020-10-10', 100),
('cust_2', DATE '2020-10-10', 15),
('cust_1', DATE '2020-10-15', 200),
('cust_1', DATE '2020-10-16', 240),
('cust_2', DATE '2020-12-20', 25),
('cust_1', DATE '2020-12-25', 140),
('cust_2', DATE '2021-01-01', 5)
)
SELECT *,
avg(totalprice) OVER (
PARTITION BY custkey
ORDER BY orderdate
RANGE BETWEEN INTERVAL '1' MONTH PRECEDING AND CURRENT ROW) AS past_month_avg,
lag(totalprice) OVER ( PARTITION BY custkey
ORDER BY orderdate
RANGE BETWEEN INTERVAL '1' MONTH PRECEDING AND CURRENT ROW) AS previous_total_price_within_last_month
FROM orders
返回:
past_month_avg
的计算结果符合预期,但
previous_total_price_within_last_month
结果并不符合预期。
预期输出
鉴于我定义了一个范围为上个月的窗口,如果“上一个”lag()
值与超出 1 个月的
null
值关联,我预计
totalprice
将返回
orderdate
-后窗。
评论中所写,使用窗框时预计不支持lag
(例如,
range between
)。 也不支持以下功能:
lead
、
ntile
、
rank
、
dense_rank
、
percent_rank
、
cume_dist
和
row_number
请参考 Trino 项目中的