在当前报告中,我正在尝试跟踪人员从部门 n 迁移到 n+1 或 n+k 的情况。
我的数据每学期分成一行(大学数据)。一个例子:
dept | term
------------
a | 20120
a | 20121
a | 20122
b | 20123 -- <- person moved to new department
b | 20130
c | 20131 -- <- person moved to another new department
a | 20132 -- <- person went back to a department they've already been in
使用查询
select
dept,
FIRST_VALUE(term) OVER (PARTITION BY dept ORDER BY term) as
from
table
order by term;
给我:
dept | term
------------
a | 20120
a | 20120
a | 20120
b | 20123
b | 20123
c | 20131
a | 20120 -- <- notice this is the same as the above set of a's
第一组中重复的 a 和第二组中的 b 是由于数据中的其他行造成的(我对此没意见,但删除它会是一个奖励)。我的主要问题是我需要将最后一个 a 视为不同的组;所以基本上每次出现集群时都会显示第一个。
这种问题可以通过使用
LAG()
函数来解决:测试地点:SQL-Fiddle
我认为您需要使用一些循环来执行此操作,因为您必须在部门更改时定义一组记录。我是用 TSQL 写的,所以你可能需要做一些语法更改,但它可以工作。