在达到非零或最后一行之前,如何在oracle pl sql中使用LAG函数?

在达到非零或最后一行之前,如何在oracle pl sql中使用LAG函数?,sql,oracle,oracle11g,window-functions,Sql,Oracle,Oracle11g,Window Functions,我想为表列编写滞后函数,如果列值为零,则该id的滞后值应为零。如果前一行的滞后值再次为零,则该id应再次滞后,直到到达非零行或最后一行。请帮助。提前感谢。两次调用同一个表不是更简单吗(例如,将它们分别称为a和B) 在B中,过滤掉值等于零的所有行,然后做一个简单的延迟(字段1) 然后把这两个表连接起来 瞧 与案例语句结合使用: LAG( CASE COLUMN_NAME WHEN 0 THEN NULL ELSE COLUMN_NAME END ) IGNORE

我想为表列编写滞后函数,如果列值为零,则该id的滞后值应为零。如果前一行的滞后值再次为零,则该id应再次滞后,直到到达非零行或最后一行。请帮助。提前感谢。

两次调用同一个表不是更简单吗(例如,将它们分别称为a和B)

在B中,过滤掉值等于零的所有行,然后做一个简单的延迟(字段1)

然后把这两个表连接起来

案例
语句结合使用:

LAG(
  CASE COLUMN_NAME
    WHEN 0
    THEN NULL
    ELSE COLUMN_NAME
    END
) IGNORE NULLS OVER ( ORDER BY OTHER_COLUMN )
例如

WITH DATA ( id, value ) AS (
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 2, 0 FROM DUAL UNION ALL
  SELECT 3, 0 FROM DUAL UNION ALL
  SELECT 4, 2 FROM DUAL UNION ALL
  SELECT 5, 0 FROM DUAL
)
SELECT  id,
        value,
        LAG(
          CASE VALUE
               WHEN 0
               THEN NULL
               ELSE VALUE
               END
        ) IGNORE NULLS
          OVER ( ORDER BY id )
          AS prev_non_zero_value
FROM    DATA;
        ID      VALUE PREV_NON_ZERO_VALUE
---------- ---------- -------------------
         1          1                     
         2          0                   1 
         3          0                   1 
         4          2                   1 
         5          0                   2 
输出

WITH DATA ( id, value ) AS (
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 2, 0 FROM DUAL UNION ALL
  SELECT 3, 0 FROM DUAL UNION ALL
  SELECT 4, 2 FROM DUAL UNION ALL
  SELECT 5, 0 FROM DUAL
)
SELECT  id,
        value,
        LAG(
          CASE VALUE
               WHEN 0
               THEN NULL
               ELSE VALUE
               END
        ) IGNORE NULLS
          OVER ( ORDER BY id )
          AS prev_non_zero_value
FROM    DATA;
        ID      VALUE PREV_NON_ZERO_VALUE
---------- ---------- -------------------
         1          1                     
         2          0                   1 
         3          0                   1 
         4          2                   1 
         5          0                   2 

请显示示例、数据、预期输出以及您尝试过的内容。