Last_value over partition by

时间:2015-07-30 20:07:24

标签: sql oracle

我有一个包含水果,日期,价格,旗帜的表格。

我用 First_value(价格)结束(按水果订单按水果分类,日期)以生成列价格优先

last_value(Price)结束(按水果订单按水果划分,无界限前后和无界追随之间的日期行)生成列价最后

Fruit   Date       Price    Flag    Price first   Price Last
Apple   6/1/2015    1.4     Yes       1.4           1.9
Apple   6/2/2015    1.5     Yes       1.4           1.9
Apple   6/3/2015    2.5     Yes       1.4           1.9
Apple   6/4/2015    3       Yes       1.4           1.9
Apple   6/5/2015    1.7     Yes       1.4           1.9 
Apple   6/6/2015    1.9     No        1.4           1.9

但我需要另一栏“价格最后标志是”给我最后更新的水果苹果价格没有标志号,在这种情况下,它应该是6/5/2015的价格

Fruit   Date       Price    Flag    Price first  Price Last  Price Last Flag Yes
Apple   6/1/2015    1.4     Yes       1.4           1.9        1.7
Apple   6/2/2015    1.5     Yes       1.4           1.9        1.7
Apple   6/3/2015    2.5     Yes       1.4           1.9        1.7
Apple   6/4/2015    3       Yes       1.4           1.9        1.7
Apple   6/5/2015    1.7     Yes       1.4           1.9        1.7 
Apple   6/6/2015    1.9     No        1.4           1.9        1.7

我不知道如何查询在函数中过滤掉标记“no”的条件。我不想通过子查询。可以在函数中添加条件和过滤器吗?谢谢

我不想使用where子句,因为那时我需要使用子查询。我也尝试过last_value(当Flag ='是'然后是价格结束时的情况)(按水果订单按水果,日期划分),它也不起作用。由于某种原因,它会混淆数据,而某些行则为空。

1 个答案:

答案 0 :(得分:1)

IGNORE NULLS选项:

last_value(case when Flag = 'Yes' then Price end ignore nulls) 
over (partition by Fruit order by Date ...

顺便说一下,partition by Fruit, Date order by Fruit,Date无法使用,而partition by Fruit order by Date代替