Snowflake cloud data platform 当前行的值为空时Snowflake的滞后函数错误
我使用LAG函数来获取项目的上一个价格,它工作正常,除了当前价格为空的情况,在这种情况下,它返回该部分中的最后一个价格 选择s.id作为销售标识, 将.property\u id、c.property\u id合并为c\u property\u id, 合并销售日期,美国创建销售日期, c、 价格, lagc.price,1,NULL忽略按c_property_id order按销售日期划分的空值作为上一个_价格 在c.sale_id=s.id上从关闭c完全外部连接销售s 其中c_属性_id=xxx 按销售日期订购 这是我得到的结果-请注意第四排上一个价格是990000Snowflake cloud data platform 当前行的值为空时Snowflake的滞后函数错误,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我使用LAG函数来获取项目的上一个价格,它工作正常,除了当前价格为空的情况,在这种情况下,它返回该部分中的最后一个价格 选择s.id作为销售标识, 将.property\u id、c.property\u id合并为c\u property\u id, 合并销售日期,美国创建销售日期, c、 价格, lagc.price,1,NULL忽略按c_property_id order按销售日期划分的空值作为上一个_价格 在c.sale_id=s.id上从关闭c完全外部连接销售s 其中c_属性_id=x
SALE_ID C_PROPERTY_ID SALE_DATE PRICE PREVIOUS_PRICE
xxx 1997-10-06 370000 NULL
xxx 2000-02-22 550000 370000
xxx 2003-09-05 675000 550000
mmmmmmm xxx 2019-11-26 NULL 990000
xxx 2019-12-17 1100000 675000
nnnnnnn xxx 2020-06-16 990000 1100000
我试图重现这个问题,但正如我所看到的,滞后的效果正如预期的那样。也许你的问题还有其他原因。你能分享一些样本数据吗
with price_data as (
select * from values
('xxx','1997-10-06',370000 ),
('xxx','2000-02-22',550000 ),
('xxx','2003-09-05',675000 ),
('xxx','2019-11-26',null ),
('xxx','2019-12-17',1100000 ),
('xxx','2020-06-16',990000 ) tmp(C_PROPERTY_ID,SALE_DATE,PRICE))
select C_PROPERTY_ID,SALE_DATE,PRICE,
lag( PRICE, 1, NULL) IGNORE NULLS OVER (partition by c_property_id order by sale_date) as previous_price
FROM price_data
order by sale_date;
+---------------+------------+---------+----------------+
| C_PROPERTY_ID | SALE_DATE | PRICE | PREVIOUS_PRICE |
+---------------+------------+---------+----------------+
| xxx | 1997-10-06 | 370000 | NULL |
| xxx | 2000-02-22 | 550000 | 370000 |
| xxx | 2003-09-05 | 675000 | 550000 |
| xxx | 2019-11-26 | NULL | 675000 |
| xxx | 2019-12-17 | 1100000 | 675000 |
| xxx | 2020-06-16 | 990000 | 1100000 |
+---------------+------------+---------+----------------+
您要求忽略空值,因此它将忽略当前记录并转到上一个值。如果希望它为NULL,那么不要忽略NULL。我错过了你的问题吗?我想要么你错过了,要么我错过了英戈尔的意思。我想要的是previous price从上面的记录中获取最后一个非空值。从文档中可以看出,IGNORE NULLS意味着在转换到上一个价格时忽略NULLS。例如,最后一行下面的行显示了正确的值,它跳过了前面的NULL,这就是我想要的。对于mmmmmm行,我还想得到675000,而不是999000,这绝对是一个不相关的值。如果没有原始数据,很难确定您在哪里看到问题。您可以在注释上进行扩展吗?在预先计算的列上进行分区/排序如何改变结果?如果我需要这个外部连接和合并结果,我能做些什么?是的,你是对的。这可能不相关,但现在我注意到,即使在价格方面,您也使用不同的列。价格是c。价格,但你从上一行中得到c.上一个价格的收盘价。我不知道为什么我在每一个地方都打问号:是的,很抱歉,这是我试图简化阅读的查询,修正了这一点。实际上,谢谢,现在当我为合并日期和它的分区和排序创建了一个明确不同的列时,一切似乎都相配