求助一个SQL语句

socg 2012-07-11 09:43:58
原始表
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

“下井”记录与最近时间的“上井”记录匹配,没有匹配则留空

昨天想了一天都没搞定,求助各位兄弟了。。。。
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
socg 2012-07-11
  • 打赏
  • 举报
回复
谢谢各位:
select 姓名,时间 as 下井时间,
(select top 1 时间 from tb where 姓名=t.姓名 and 时间>t.时间 and 类型='上井' order by 时间) as 上井时间
from tb t
where 类型='下井'

看起来效率很低,但是2万条数据的测试结果 2楼 17秒,3楼1秒
lzly0812 2012-07-11
  • 打赏
  • 举报
回复
select 姓名,MAX(case when 类型='上井' then 时间 else null end) as 上井时间,
MAX(case when 类型='下井' then 时间 else null end) as 下井时间 from tb group by 姓名
百年树人 2012-07-11
  • 打赏
  • 举报
回复
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[姓名] varchar(1),[类型] varchar(4),[时间] datetime)
insert [tb]
select 1,'A','下井','2012-03-14 23:56:51' union all
select 2,'A','上井','2012-03-15 23:57:00' union all
select 3,'B','下井','2012-03-14 23:57:05' union all
select 4,'C','下井','2012-03-14 23:59:00' union all
select 5,'A','上井','2012-03-15 23:56:51' union all
select 6,'B','上井','2012-03-15 23:58:05'
go

select 姓名,时间 as 下井时间,
(select top 1 时间 from tb where 姓名=t.姓名 and 时间>t.时间 and 类型='上井' order by 时间) as 上井时间
from tb t
where 类型='下井'

/**
姓名 下井时间 上井时间
---- ----------------------- -----------------------
A 2012-03-14 23:56:51.000 2012-03-15 23:57:00.000
B 2012-03-14 23:57:05.000 2012-03-15 23:58:05.000
C 2012-03-14 23:59:00.000 NULL

(3 行受影响)
**/
NET_2011 2012-07-11
  • 打赏
  • 举报
回复
select *
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.类型='下井'
AcHerat 元老 2012-07-11
  • 打赏
  • 举报
回复

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.类型 = '下井'

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧