滞后对每个组分别起作用

时间:2015-11-22 18:54:05

标签: sql oracle data-warehouse

我的查询给出了结果:

select namee, obligatory,Lag(obligatory, 1) OVER (ORDER BY namee) lag_test, row_number() over (partition by obligatory order by namee) nr from test_data


name  obligatory      lag_test     nr  
--------------------------------------
aaa   2015-11-21        
aaa   2015-11-20      2015-11-21    1
aaa   2015-11-23      2015-11-20    1
aaa   2015-11-21      2015-11-23    1
aaa   2015-11-20      2015-11-21    2
bbb   2015-11-21      2015-11-23    4
bbb   2015-11-21      2015-11-21    3
.
. 

我想得到的结果是'滞后'对于每个后续组都适用于第一组,如果它是可行的, row_number'每组的功能正常,我该怎么办

我的预期结果:


name  obligatory      lag_test     nr  
--------------------------------------
aaa   2015-11-21                    1
aaa   2015-11-20      2015-11-21    2
aaa   2015-11-23      2015-11-20    3
aaa   2015-11-21      2015-11-23    4
aaa   2015-11-20      2015-11-21    5
bbb   2015-11-21                    1 
bbb   2015-11-21      2015-11-21    2
.
. 

1 个答案:

答案 0 :(得分:1)

使用分析函数时,partition by子句告诉数据库如何对数据进行分组。您的order by子句告诉数据库如何在组内订购数据。

我猜你想要

select namee, 
       obligatory,
       lag(obligatory) over (partition by namee order by obligatory) last_obligatory,
       row_number() over (partition by namee order by obligatory) rn
  from test_data

这会按namee将数据分组。然后,它会在每个组中按obligatory排序。最后,它会根据组内行的顺序计算上一个obligatoryrow_number