与LAG解析功能比较

subi_speedrunner

我正在使用oracle PL / SQL。

我正在尝试将列值与LAG函数进行比较

以下是声明:

decode(LAG(col1,1) OVER (ORDER BY col3),col1,'No Change','Change_Occured') Changes

对于第一行,LAG将始终与前一个空行进行比较。因此,对于我的查询,列的第一行'Changes'始终显示该值,因为Change_Occured实际上没有发生任何更改。有什么办法可以处理这种情况?

假设此表:

| col1 | col2 | 
|  2   | 3    |
|  2   | 6    |
|  2   | 7    |
|  2   | 9    |

的每一行都col1与先前的值进行比较,因此结果将是

| col1 | col2 | Changes        |
|  2   | 3    | Change_occured |
|  2   | 9    | No Change      |
|  2   | 5    | No Change      |
|  2   | 8    | No Change      |

那么我应该如何处理列的第一行 Changes

Lalit Kumar B

LAG Analytic函数的语法为

LAG  (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause)
  • 默认值-如果偏移量超出窗口范围,则返回该值。默认值为NULL。
SQL>与sample_data AS(
  2 SELECT 2 col1,3 col2 FROM dual UNION ALL
  3 SELECT 2 col1,6 col2从双UNION ALL
  4 SELECT 2 col1,7 col2 FROM dual UNION ALL
  5 SELECT 2 col1,9 col2 FROM对偶
  6)
  7-模仿真实表的sample_data结束
  8 SELECT col1,LAG(col1,1)OVER(ORDER BY col2)从sample_data更改;

      COL1变更
---------- ----------
         2
         2 2
         2 2
         2 2

因此,在DECODE表达式中,您将NULL值与实际值进行比较,并且其计算结果为Change_Occurred

您可以使用默认值作为列值本身:

DECODE(LAG(col1,1, col1) OVER (ORDER BY col2),col1,'No Change','Change_Occured') Changes

例如,

SQL> WITH sample_data AS(
  2  SELECT 2 col1, 3 col2 FROM dual UNION ALL
  3  SELECT 2 col1, 6 col2 FROM dual UNION ALL
  4  SELECT 2 col1, 7 col2 FROM dual UNION ALL
  5  SELECT 2 col1, 9 col2 FROM dual
  6  )
  7  -- end of sample_data mimicking real table
  8  SELECT col1,
  9         DECODE(
 10                LAG(col1,1, col1) OVER (ORDER BY col2),
 11                col1,
 12                'No Change',
 13                'Change_Occured'
 14               ) Changes
 15  FROM sample_data;

      COL1 CHANGES
---------- --------------
         2 No Change
         2 No Change
         2 No Change
         2 No Change

SQL>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章