[英]SQL Server - Count Rows based on How Column values have changed across rows
聽起來您想要每個員工的第一行和最后一行。 然后您可以跟蹤整體運動:
select first_workfrom, last_workfrom, count(*)
from (select t.*,
first_value(workfrom) over (partition by employee order by recordid) as first_workfrom,
first_value(workfrom) over (partition by employee order by recordid desc) as last_workfrom
from t
) t
group by first_workfrom, last_workfrom
having first_workfrom <> last_workfrom;
First_value & Last_value 自 2012 年或更高版本開始可用,如果您使用較低版本運行,則可以使用apply
:
select movement, count(*)
from (select distinct t.employee,
concat(t1.workfrom, ' to ', t11.workfrom) as movement
from table t cross apply
( select top (1) t1.*
from table t1
where t1.employee = t.employee
order by t1.id
) t1 cross apply
( select top (1) t11.*
from table t11
where t11.employee = t.employee
order by t11.id desc
) t11
where t1.workfrom <> t11.workfrom
) t
group by movement;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.