请教SQL高手:非固定时间段分类统计查询问题 (要求不用游标)
表结构如下:
CREATE TABLE #tb1(部门 nvarchar(10),  姓名 nvarchar(10), 打卡时间 datetime,打卡次数 int)
INSERT INTO #tb1
SELECT 'A','jim','2012-01-01 07:17:39',1 UNION ALL
SELECT 'A','jim','2012-01-01 07:20:39',2 UNION ALL
SELECT 'A','jim','2012-01-01 07:55:39',1 UNION ALL
SELECT 'A','tom','2012-01-01 07:59:39',1 UNION ALL
SELECT 'A','tom','2012-01-01 08:15:39',1 UNION ALL
SELECT 'A','jim','2012-01-01 08:20:39',2 UNION ALL
SELECT '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  
------解决方案--------------------
加入自增: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分组取最大、最小时间即可
------解决方案--------------------在姓名、ID上建立复合索引试试