原始表
ID 姓名 类型 时间
1 A 下井 2012-03-14 23:56:51
2 A 上井 2012-03-15 23:57:00
3 B 下井 2012-03-14 23:57:05
4 C 下井 2012-03-14 23:59:00
5 A 上井 2012-03-15 23:56:51
6 B 上井 2012-03-15 23:58:05结果
姓名 下井时间 上井时间
A 2012-03-14 23:56:51 2012-03-15 23:57:00
B 2012-03-14 23:57:05 2012-03-15 23:58:05
C 2012-03-14 23:59:00 null“下井”记录与最近时间的“上井”记录匹配,没有匹配则留空昨天想了一天都没搞定,求助各位兄弟了。
ID 姓名 类型 时间
1 A 下井 2012-03-14 23:56:51
2 A 上井 2012-03-15 23:57:00
3 B 下井 2012-03-14 23:57:05
4 C 下井 2012-03-14 23:59:00
5 A 上井 2012-03-15 23:56:51
6 B 上井 2012-03-15 23:58:05结果
姓名 下井时间 上井时间
A 2012-03-14 23:56:51 2012-03-15 23:57:00
B 2012-03-14 23:57:05 2012-03-15 23:58:05
C 2012-03-14 23:59:00 null“下井”记录与最近时间的“上井”记录匹配,没有匹配则留空昨天想了一天都没搞定,求助各位兄弟了。
select a.姓名,a.下井时间,b.上井时间
from tb a outer apply (select top 1 上井时间 from tb
where 姓名 = t.姓名 and 类型 = '上井' and id >= t.id order by id) b
where a.类型 = '下井'
from 原始表 as a
left join 原始表 as b on a.姓名=b.姓名 and b.类型='上井' and ID=(select min(ID) from 原始表 where 姓名=b.姓名 and 类型=b.类型 and ID>a.ID)
where a.类型='下井'
MAX(case when 类型='下井' then 时间 else null end) as 下井时间 from tb group by 姓名
select 姓名,时间 as 下井时间,
(select top 1 时间 from tb where 姓名=t.姓名 and 时间>t.时间 and 类型='上井' order by 时间) as 上井时间
from tb t
where 类型='下井'看起来效率很低,但是2万条数据的测试结果 2楼 17秒,3楼1秒