Snowflake cloud data platform 当前行的值为空时Snowflake的滞后函数错误

Snowflake 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

我使用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 按销售日期订购 这是我得到的结果-请注意第四排上一个价格是990000

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.上一个价格的收盘价。我不知道为什么我在每一个地方都打问号:是的,很抱歉,这是我试图简化阅读的查询,修正了这一点。实际上,谢谢,现在当我为合并日期和它的分区和排序创建了一个明确不同的列时,一切似乎都相配