日期:2014-05-18  浏览次数:20588 次

[求救] 如何合并相时间相近的记录?
在我们公司的考勤表里,可能员工为了怕打卡没通过而重复打卡,会有以下时间几乎相同的数据,如下:

姓名 编号 卡号 日期 星期 时间
----------------------------
张三 558 15609018 2007-10-01 1 07:52:03
张三 558 15609018 2007-10-01 1 07:52:11
张三 558 15609018 2007-10-01 1 07:52:16
张三 558 15609018 2007-10-01 1 07:52:20
张三 558 15609018 2007-10-01 1 07:52:29
张三 558 15609018 2007-10-01 1 07:52:36
张三 558 15609018 2007-10-01 1 18:09:39
张三 558 15609018 2007-10-01 1 18:09:43
张三 558 15609018 2007-10-02 2 08:44:02
张三 558 15609018 2007-10-02 2 08:44:11
张三 558 15609018 2007-10-02 2 08:44:16
张三 558 15609018 2007-10-02 2 08:44:20
张三 558 15609018 2007-10-02 2 08:44:24
张三 558 15609018 2007-10-02 2 08:44:33
张三 558 15609018 2007-10-02 2 08:44:37
张三 558 15609018 2007-10-02 2 17:15:09


如何做才能合并时间为5分钟内的考勤记录呢,即多个考勤记录,如果时间只相差5分钟内,即只要显示最早的那条考勤记录即可,其它的不用显示。我想要的合并结果如下:

姓名 编号 卡号 日期 星期 时间
----------------------------
张三 558 15609018 2007-10-01 1 07:52:03
张三 558 15609018 2007-10-01 1 18:09:39
张三 558 15609018 2007-10-02 2 08:44:02
张三 558 15609018 2007-10-02 2 17:15:09

小弟对SQL了解得不多,请各位高手帮忙,谢谢了!!!


------解决方案--------------------
--创建测试数据
create table test(姓名 varchar(8),编号 int,卡号 int,日期 varchar(10),星期 int,时间 varchar(10))
insert into test values('张三',558,15609018,'2007-10-01',1,'07:52:03') 
insert into test values('张三',558,15609018,'2007-10-01',1,'07:52:11') 
insert into test values('张三',558,15609018,'2007-10-01',1,'07:52:16') 
insert into test values('张三',558,15609018,'2007-10-01',1,'07:52:20') 
insert into test values('张三',558,15609018,'2007-10-01',1,'07:52:29') 
insert into test values('张三',558,15609018,'2007-10-01',1,'07:52:36') 
insert into test values('张三',558,15609018,'2007-10-01',1,'18:09:39') 
insert into test values('张三',558,15609018,'2007-10-01',1,'18:09:43') 
insert into test values('张三',558,15609018,'2007-10-02',2,'08:44:02') 
insert into test values('张三',558,15609018,'2007-10-02',2,'08:44:11') 
insert into test values('张三',558,15609018,'2007-10-02',2,'08:44:16') 
insert into test values('张三',558,15609018,'2007-10-02',2,'08:44:20') 
insert into test values('张三',558,15609018,'2007-10-02',2,'08:44:24') 
insert into test values('张三',558,15609018,'2007-10-02',2,'08:44:33') 
insert into test values('张三',558,15609018,'2007-10-02',2,'08:44:37') 
insert into test values('张三',558,15609018,'2007-10-02',2,'17:15:09') 

--执行查询语句
select 
t.* 
from 
test t
where 
not exists(select 

from 
test 
where 
卡号=t.卡号 
and 
日期=t.日期 
and 
datediff(ss,cast(时间 as datetime),cast(t.时间 as datetime)) between 1 and 300)

--输出查询结果
/*
姓名 编号 卡号 日期 星期 时间
-------- ----------- ----------- ---------- ----------- ---------- 
张三 558 15609018 2007-10-01 1 07:52:03
张三 558 15609018 2007-10-01 1 18:09:39
张三 558 15609018 2007-10-02 2 08:44:02
张三 558 15609018 2007-10-02 2 17:15:09
*/

--删除测试表格
drop table test