当前位置: 首页 > 面试题库 >

用最后一个非空值填充空值-Oracle SQL

蔺昊穹
2023-03-14
问题内容

我有一个包含4列的表格:项目,年份,月份,金额。Amount的某些值是null,当发生这种情况时,我想用以前的非null的Amount值来填充这些值。当只有一个空值时,我可以使用LAG函数轻松地做到这一点,但是当连续有多个空值时,我不确定如何处理它。以下是该表的外观示例,其中添加了要在查询中添加的内容的列:

Item | Year | Month | Amount | New_Amount
AAA  | 2013 | 01    | 100    | 100
AAA  | 2013 | 02    |        | 100
AAA  | 2013 | 03    | 150    | 150
AAA  | 2013 | 04    | 125    | 125
AAA  | 2013 | 05    |        | 125
AAA  | 2013 | 06    |        | 125
AAA  | 2013 | 07    |        | 125
AAA  | 2013 | 08    | 175    | 175

我有两个想法,我似乎无法投入工作来实现自己想要的东西。首先,我要使用LAG,但后来我注意到,当连续有多个空值时,它就不能满足要求。接下来,我将使用FIRST_VALUE,但这在这种情况下无济于事,在这种情况下,将有一个null,然后是值,然后是更多的null。有没有一种方法可以使用FIRST_VALUE或其他类似的函数来检索最后一个非空值?


问题答案:

*具有IGNORE *NULLS的last_value 在Oracle 10g中可以正常工作:

select item, year, month, amount, 
       last_value(amount ignore nulls) 
         over(partition by item 
              order by year, month 
              rows between unbounded preceding and 1 preceding) from tab;

rows between unbounded preceding and 1 preceding 设置html" target="_blank">分析功能的窗口。

在这种情况下,Oracle从开头(UNBOUNDED PRECEDING)到当前行-1(1 PRECEDING),在PARTITION
BY(同一项目)中定义的组内搜索LAST_VALUE。

它是Oracle 10g中带有IGNORE NULLS的LEAD / LAG的常见替代品

但是,如果您使用的是Oracle 11g,则可以使用Gordon Linoff的答案中的LAG(有一个小错字,带有“忽略空值”)



 类似资料:
  • 问题内容: 假设我们有一个1d的numpy数组,其中填充了一些值。假设其中一些是。 有什么方法可以利用数组的功能,用找到的最后一个非零值填充所有值? 例如: 一种方法是使用以下功能: 但是,这是使用原始的python循环,而不是利用and功能。 如果我们知道可能有相当数量的连续零,则可以使用基于的东西。问题在于连续零的数量可能很大… 有任何想法吗?还是我们应该直接去? 免责声明: 我会说很久以前,

  • 我在SQL Server 2012中有两个表 表1 表2 每个用户可以拥有1到8个权限。 我需要创建一个视图,该视图将为我提供具有8个权限条目的UserID,其中任何未使用的条目都包含null值,即条目的顺序无关紧要。 这让我很困惑,我甚至不知道从哪里开始?

  • 我喜欢用基于其他列的Formel填充列中的空值: 你能看出我的代码有什么问题吗?因为这段代码后面有一些nulll值。 我的数据框: Datadate|datacqtr 2002-02-28|2002Q1 Dataacqtr代表四分之一。有时我有datadate,但没有datacqtr(四分之一)。所以我喜欢填充基于colmn数据的colmn datacqtr。

  • 我正在尝试合并两个数据帧: 第一个数据帧,,用INTEGERS/STRINGS填充 左边的数据框一起被整数/列表填充。 当我使用pandas函数时,新的数据框将用NaN填充右侧的数据框,而不是列表 我期望使用两个原始数据帧中的值创建一个新的合并数据帧。相反,在新的数据框中,“control”数据框中的所有值都是正确的,但“together”数据框中的所有列表都是正确的 以下是一些样本数据: 以下是

  • 我有一个熊猫数据框,它有超过4列。col1中的某些值缺失,我希望根据以下方法设置这些缺失的值: 尝试根据具有相同col2, col3, col4值的记录的col1值的平均值来设置它 如果没有这样的记录,则根据具有相同col2, col3值的记录的col1值的平均值来设置它 如果仍然没有这样的记录,则根据具有相同col2值的记录的col1值的平均值来设置它 如果以上都找不到,将其设置为col1中所有

  • null 任何帮助都非常感谢,谢谢。