上一行的值有值,前一些行没有值
Posted
技术标签:
【中文标题】上一行的值有值,前一些行没有值【英文标题】:Value from Previous Row with a value, some previous rows don't have a value 【发布时间】:2020-08-26 16:01:14 【问题描述】:我有一个返回行号和“零售”值的查询。尽管有时我的结果集不包含此“零售”值的值。此外,在我获得此特定项目的“零售”值之前,它可能是几个先前的行。我正在尝试创建一个查询,它将从包含“零售”值的第一行(可能是任何行号)返回一个“零售”值。
在下面的第 46 行示例中,我想从第 45 行中提取值。但是在第 53 行和第 54 行中,我想从第 52 行中提取值。
建议?
【问题讨论】:
查看超前和滞后函数 请发布您的查询和脚本以创建示例数据。 您能否也添加查询的源数据,而不是其结果?如果不从中间步骤开始,这可能更容易解决。 【参考方案1】:您可以使用窗口函数。不幸的是,SQL Server 不支持lag()
的ignore nulls
选项(很少有数据库支持...),但我们可以通过一些间隙和孤岛技术来解决这个问题。
这个想法是构建相邻行(岛)的组,窗口总和随着每个非null
零售值而递增。然后,我们可以使用该信息带来“缺失”值。
select
t.*,
max(retail) over(partition by grp) real_retail
from (
select
t.*,
sum(case when retail is null then 0 else 1 end) over(order by rn) grp
from mytable t
) t
【讨论】:
以上是关于上一行的值有值,前一些行没有值的主要内容,如果未能解决你的问题,请参考以下文章