表结构如下:
CREATE TABLE #tb1(部门 nvarchar(10),  姓名 nvarchar(10), 打卡时间 datetime,打卡次数 int)
INSERT INTO #tb1
SELECT 'A','jim','2012-01-01 07:17:39',1 UNION ALLSELECT 'A','jim','2012-01-01 07:20:39',2 UNION ALLSELECT 'A','jim','2012-01-01 07:55:39',1 UNION ALLSELECT 'A','tom','2012-01-01 07:59:39',1 UNION ALLSELECT 'A','tom','2012-01-01 08:15:39',1 UNION ALLSELECT 'A','jim','2012-01-01 08:20:39',2 UNION ALLSELECT 'A','jim','2012-01-01 09:55:39',1想得到结果:
部门  姓名       开始时间          结束时间                         打卡次数
A     jim    2012-01-01 07:17:39  2012-01-01 07:55:39                 4
A     tom    2012-01-01 07:59:39  2012-01-01 08:15:39                 2      
A     jim    2012-01-01 08:20:39  2012-01-01 09:55:39                 3
 

解决方案 »

  1.   

    加入自增:id   int   identity(1,1)select a.*,isnull((select min(id) from #tb1 where  a.姓名<>姓名 and a.id<id),(select max(id) from #tb1)) as ns from #tb1 a;
    按NS分组取最大、最小时间即可
      

  2.   

    Hi ‘wwwwb',   谢谢你的回复,我用的是SQL2000,目前表中数据有将近900万笔, 运行上述代码是否会影响效率?
      

  3.   

    最后比较了一下,选择靠脚本实现了,效率还在跟踪测试中,谢谢你'WWWWA'