分别适用于每个组的滞后
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
对行进行排序。最后,它根据组内行的顺序计算前面的obligatory
和row_number
。
我的查询给出了结果:
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
对行进行排序。最后,它根据组内行的顺序计算前面的obligatory
和row_number
。