解析函数 - 使用 LAG() 比较值

Analytic function - Comparing values using LAG()

假设以下数据:

| Col1  |   Col2      |
| 3     |  20-dec-15  |
| 4     |  20-dec-15  |
| 8     |  25-dec-15  |
|10     |  25-dec-15  |

我必须比较特定日期的 Col1 列的值。

例如:对于 2015 年 12 月 20 日的更改,3 更改为 4。

我必须使用解析函数来解决这个问题。

以下是我正在使用的查询

decode(LAG(Col1,1,Col1) OVER (partition by Col2 order by Col2),Col1,0,1) Changes

由于 Col2 是日期列,按日期分区对我不起作用。我们可以将日期列用作分区吗?

预期结果应为:

| Changes  | 
| 0        |
| 1        |
| 0        |
| 1        |

此处 1 表示比较同一日期时发生了变化。

您需要使用 trunc() 才能将时间部分重置为 00:00:00 但您仍应保留 order by col2 以便同一天的所有行都按时间排序部分:

对于这种比较,我也更喜欢明确的 case,我个人觉得 decode() 真的很难读:

select case 
         when col1 = lag(col1,1,col1) over (partition by trunc(col2) order by col2) then 0 
         else 1
       end as changes
from the_table;