`lag()` 与 `over` 和 `range Between` 会在前一条记录超出范围时返回一个值

问题描述 投票:0回答:1

我想在使用

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
返回:

自定义键订购日期总价过去一个月的平均前一个月内的总价格cust_22020-10-101515.0空cust_22020-12-202525.015cust_22021-01-01515.025cust_12020-10-10100100.0空cust_12020-10-15200150.0100cust_12020-10-16240180.0200cust_12020-12-25140140.0240
问题:虽然

past_month_avg

 的计算结果符合预期,但 
previous_total_price_within_last_month
 结果并不符合预期。


预期输出

鉴于我定义了一个范围为上个月的窗口,如果“上一个”

lag()

值与超出 1 个月的 
null
值关联,我预计 
totalprice
 将返回 
orderdate
 -后窗。

自定义键订购日期总价过去一个月的平均前一个月内的总价格cust_22020-10-101515.0空cust_22020-12-202525.0空*cust_22021-01-01515.025cust_12020-10-10100100.0空cust_12020-10-15200150.0100cust_12020-10-16240180.0200cust_12020-12-25140140.0空*
*期望值

sql amazon-athena presto trino
1个回答
0
投票

评论中所写,使用窗框时预计不支持lag

(例如,
range between
)。
也不支持以下功能:
lead
ntile
rank
dense_rank
percent_rank
cume_dist
row_number

请参考 Trino 项目中的

this问题,以及后续的pull request

© www.soinside.com 2019 - 2024. All rights reserved.