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

具有动态参数的Oracle Lag函数

宋华美
2023-03-14
问题内容

我有一个特定的问题。我有一个包含无效值的表。我需要用0大于的先前值替换无效值(此处)0

困难在于,使用Update或insert(游标和update可以做到)对我来说是不合适的。我唯一的方法是使用Select语句。

当我将lag(col1, 1)-函数与when一起使用时,我只会得到一列具有正确值的列。

select col1, col2 realcol2,  
(case 
  when col2 = 0 then 
    lag(col2,1,1) over (partition by col1 order by col1 )
  else
   col2
  end ) col2,     
col3 realcol3,
(case 
  when col3 = 0 then 
    lag(col3,1,1) over (partition by col1 order by col1 )
  else
   col3
  end ) col3
from test_table

内容TEST_TABLE

---------------------------
 Col1 | Col2 | Col3 | Col4
---------------------------
  A   |  0   |  1   |  5
  B   |  0   |  4   |  0
  C   |  2   |  0   |  0
  D   |  0   |  0   |  0
  E   |  3   |  5   |  0
  F   |  0   |  3   |  0
  G   |  0   |  3   |  1
  A   |  0   |  1   |  5
  E   |  3   |  5   |  0

预期查询结果:

---------------------------
 Col1 | Col2 | Col3 | Col4
---------------------------
  A   |  0   |  1   |  5
  B   |  0   |  4   |  5
  C   |  2   |  4   |  5
  D   |  2   |  4   |  5
  E   |  3   |  5   |  5
  F   |  3   |  3   |  5
  G   |  3   |  3   |  1
  A   |  3   |  1   |  5
  E   |  3   |  5   |  5

问题答案:
SELECT col1,
       CASE col2 WHEN 0 THEN NVL( LAG( CASE col2 WHEN 0 THEN NULL ELSE col2 END ) IGNORE NULLS OVER ( ORDER BY NULL ), 0 ) ELSE col2 END AS col2,
       CASE col3 WHEN 0 THEN NVL( LAG( CASE col3 WHEN 0 THEN NULL ELSE col3 END ) IGNORE NULLS OVER ( ORDER BY NULL ), 0 ) ELSE col3 END AS col3,
       CASE col4 WHEN 0 THEN NVL( LAG( CASE col4 WHEN 0 THEN NULL ELSE col4 END ) IGNORE NULLS OVER ( ORDER BY NULL ), 0 ) ELSE col4 END AS col4
FROM   table_name;

结果

COL1       COL2       COL3       COL4
---- ---------- ---------- ----------
A             0          1          5 
B             0          4          5 
C             2          4          5 
D             2          4          5 
E             3          5          5 
F             3          3          5 
G             3          3          1 
A             3          1          5 
E             3          5          5


 类似资料:
  • 我想创建一个java程序,它接受动态数量的参数。例如: 其中可能会有所不同。 我使用Commons CLI作为命令行选项解析器。但我找不到一种方法来实现一个接受动态参数数的选项。 setArgs指定选项必须接受的参数数。是否可以指定选项可以接受的最小参数数? 或者我应该使用其他工具来解析命令行选项?

  • 我正在查看Spark SQL中的Spark DataFrame的窗口幻灯片函数。 我有一个包含列、和的数据表。

  • 问题内容: 我需要创建一个没有构造函数参数的不完整对象。像这样 我希望这个Bean是Spring管理的,以便以后可以使用Spring AOP。 但是我的bean需要将超时作为动态值传递-是否有一种方法可以创建在构造函数中注入了动态值的spring托管bean? 问题答案: 有一个方法,根据javadoc,它允许您指定构造函数参数,该参数用于覆盖bean定义自己的参数。因此,您可以在bean文件中放

  • 问题内容: 我正在寻找一个窍门。我知道如何在JavaScript中调用动态的任意函数,并传递特定的参数,如下所示: 我知道如何使用内部的集合传递可选的,无限制的参数,但是,我不知道如何发送任意数量的参数以动态发送给它;我该如何完成这样的工作,但是要有任意数量的可选参数(不要使用丑陋的– )? 问题答案: 使用函数的apply方法:- 编辑 :在我看来,这将是一个稍微的调整会更有用: 这将在浏览器之

  • 问题内容: 我正在尝试创建一个数据库查询函数,该函数可以采用多个参数并可以在其他地方重用,但是我尝试了许多与我的方法类似的在线方法,但它们无法按预期工作。 我希望能够使用此单个函数随时随地运行查询,使用PDO驱动程序这种类型的函数要容易得多,因为您只需在内部输入绑定即可,但是在这种情况下,我不得不立即将MySQLi用作应用程序依赖它,但想要升级它以使用准备好的语句。 我需要如何使用该函数以确保其可

  • 本文向大家介绍浅谈function(函数)中的动态参数,包括了浅谈function(函数)中的动态参数的使用技巧和注意事项,需要的朋友参考一下 我们可向函数传递动态参数,*args,**kwargs,首先我们来看*args,示例如下: 1.show(*args) 首先我们定义了一个函数,函数show(*args)里面的*args可以接收动态参数,这里我们接收一个元组形式的参数,我们可以向show(