假设以下数据:
| Col1 | Col2 |
| 3 | 20-dec-15 |
| 4 | 20-dec-15 |
| 8 | 25-dec-15 |
|10 | 25-dec-15 |
我必须比较特定日期的列Col1
的值。
例如:对于20-dec-15发生的变化,因为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表示在比较相同日期时发生更改。
答案 0 :(得分:1)
您需要使用trunc()
将时间部分重置为00:00:00
,但您仍应保留order by col2
,以便同一天的所有行按时间部分排序:
我也更喜欢显式的case
进行这种比较,我个人觉得解码()真的很难阅读:
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;