读书人

[求救] 怎么合并相时间相近的记录

发布时间: 2012-01-31 21:28:41 作者: rapoo

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

姓名编号卡号日期星期时间
----------------------------
张三558156090182007-10-01107:52:03
张三558156090182007-10-01107:52:11
张三558156090182007-10-01107:52:16
张三558156090182007-10-01107:52:20
张三558156090182007-10-01107:52:29
张三558156090182007-10-01107:52:36
张三558156090182007-10-01118:09:39
张三558156090182007-10-01118:09:43
张三558156090182007-10-02208:44:02
张三558156090182007-10-02208:44:11
张三558156090182007-10-02208:44:16
张三558156090182007-10-02208:44:20
张三558156090182007-10-02208:44:24
张三558156090182007-10-02208:44:33
张三558156090182007-10-02208:44:37
张三558156090182007-10-02217:15:09


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

姓名编号卡号日期星期时间
----------------------------
张三558156090182007-10-01107:52:03
张三558156090182007-10-01118:09:39
张三558156090182007-10-02208:44:02
张三558156090182007-10-02217: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
1
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

读书人网 >SQL Server

热点推荐