这个显然不是使用SQL语句可以解决的,肯定要用程序来解决。当然用存储过程也可以。使用存储过程实现的话,简单思路如下:1。建一个临时表,表结构如下: 卡号1 卡号2 时间1 间隔时间2。建立一个存储过程,包括三个参数:起始日期/截止日期/间隔时间范围(X秒)3。存储过程中第一句SQL语句为: select * from 打卡表 where checkdate>=起始日期 and checkdate<=截止日期 order by checkdate,checktime 打开一个游标,遍历所有符合条件记录4。在上一个游标的循环中,为每一条记录,假设其为A记录,查找其后 X 秒内的所有打卡记录: select * from 打卡表 where checkdate=A记录日期 and checktime-A记录时间<X and checktime>A记录时间 order by checktime 打开一个游标,遍历所有符合条件的记录5。将上一游标中查询到的记录假设为B记录,则在临时表中生成一条记录 insert into 临时表 values (卡号1,卡号2,A记录时间,B记录时间-A记录时间) 其中,卡号1为A记录卡号和B记录卡号,进行字符串比较,较大的一个,卡号2为较小的一个6。循环结束后,就获得了指定的日期段范围,在指定的时间间隔范围内连续刷卡的所有“卡号对”记录7。Select 卡号1,卡号2,count(卡号1) from 临时表 group by 卡号1,卡号2 order by count(卡号1) desc 那么,排在前面的就是在较小的时间间隔范围内,出现连续刷卡情况很多的卡号组合,可以怀疑为代打卡。不知道你看懂了没?
但好像处理起来太麻烦了 , 我用的是Sql 2000 数据库 。
不知道怎么处理这个过程
卡号1 卡号2 时间1 间隔时间2。建立一个存储过程,包括三个参数:起始日期/截止日期/间隔时间范围(X秒)3。存储过程中第一句SQL语句为:
select * from 打卡表 where checkdate>=起始日期 and checkdate<=截止日期 order by checkdate,checktime
打开一个游标,遍历所有符合条件记录4。在上一个游标的循环中,为每一条记录,假设其为A记录,查找其后 X 秒内的所有打卡记录:
select * from 打卡表 where checkdate=A记录日期 and checktime-A记录时间<X and checktime>A记录时间
order by checktime
打开一个游标,遍历所有符合条件的记录5。将上一游标中查询到的记录假设为B记录,则在临时表中生成一条记录
insert into 临时表 values (卡号1,卡号2,A记录时间,B记录时间-A记录时间)
其中,卡号1为A记录卡号和B记录卡号,进行字符串比较,较大的一个,卡号2为较小的一个6。循环结束后,就获得了指定的日期段范围,在指定的时间间隔范围内连续刷卡的所有“卡号对”记录7。Select 卡号1,卡号2,count(卡号1) from 临时表 group by 卡号1,卡号2 order by count(卡号1) desc
那么,排在前面的就是在较小的时间间隔范围内,出现连续刷卡情况很多的卡号组合,可以怀疑为代打卡。不知道你看懂了没?
所以想要找出可疑的代拉卡人 . 然后根据他们的具体时间查看录相 。