分别适用于每个组的滞后

lag that works for each group separately

我的查询给出了结果:

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
.
. 

当您使用分析函数时,您的 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