日期:2014-05-17  浏览次数:20806 次

请教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上建立复合索引试试