Sql 与滞后分析函数的比较
我正在使用oraclepl/SQL 我试图将列值与Sql 与滞后分析函数的比较,sql,oracle,oracle11g,lag,window-functions,Sql,Oracle,Oracle11g,Lag,Window Functions,我正在使用oraclepl/SQL 我试图将列值与LAG函数进行比较。 以下是声明: decode(LAG(col1,1) OVER (ORDER BY col3),col1,'No Change','Change_Occured') Changes 对于第一行,LAG将始终与前一个空行进行比较。因此,对于我的查询,'Changes'列的第一行总是将值显示为Change\u occurrented,而实际上没有发生任何更改。有没有办法处理这种情况 假设此表: | col1 | col2 |
LAG
函数进行比较。以下是声明:
decode(LAG(col1,1) OVER (ORDER BY col3),col1,'No Change','Change_Occured') Changes
对于第一行,LAG将始终与前一个空行进行比较。因此,对于我的查询,'Changes'
列的第一行总是将值显示为Change\u occurrented
,而实际上没有发生任何更改。有没有办法处理这种情况
假设此表:
| 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 |
因此,我应该如何处理列的第一行更改可能是:
decode(LAG(col1,1, col1) OVER (ORDER BY col3),col1,'No Change','Change_Occured') Changes
如果偏移量超出窗口范围,则返回可选的默认值。如果未指定默认值,则其默认值为空。分析函数的语法为:
LAG (value_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause)
- 默认值-如果偏移量超出窗口范围,则返回的值。默认值为空
比如说,
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>
请提供示例数据并显示您的预期输出。我添加了默认数据。
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>