上一行的值有值,前一些行没有值

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

【讨论】:

以上是关于上一行的值有值,前一些行没有值的主要内容,如果未能解决你的问题,请参考以下文章

Mysql当前列的值等于上一行的值累加前一列的值

如何用前一行的值填充空列?

PYSPARK:根据条件用另一个行值更新一行中的值?

Java返回值为null时如何避免报错?

VBA - 根据另一列在同一行上拉取值

SQL 如何把一列的值转换成一行显示