很好弄啊.
首先表1按卡号,时间排序,一天一查询,对每组卡号添加入表2,计工资日期=第一条日期,卡号=卡号,班组=(if 第一条时间在17:30以前(自己定义晚上时间)then 班组为‘白班  ’ else 为‘晚班’) ,打卡时间1 =第一条时间,打卡时间2 =第一条时间2,...

解决方案 »

  1.   

    to:zcfgarfield(加菲) 
    我是已知员工的班组,需要根据班组来确定将打卡的时间写入到表2中.因为第二天的打卡时间有可能要将他计算到先一天的出勤.
      

  2.   

    我的算法(前提:班种固定,一个白班,一个晚班,统计范围不超过一个月,动态数组太麻烦):
    var
       WorkTimeflag : array[1..31] of boolean;//0:休息,1:日班,2:夜班
       WorkTime : array[1..31,1..2] of TDateTime;//记录规定工作时间,如果固定,就不需要了,如果有多个工作时间段,可以自己改动
    begin   while 每一个员工 do
       begin
          清空WorkTimeflag,WorkTime
          查询员工在统计范围内的班组情况,设置WorkTimeflag,WorkTime
          while 每条员工在统计范围内的打卡记录 do
          begin
             排除重复刷卡(1分钟之内的多次刷卡只算一次)
             根据WorkTimeflag的情况判断该条打卡记录的属于哪天的记录(当天还是昨天)
             若一天的打卡记录处理完毕,则整理数据添加入库
          end;
          如果统计的最后一天是夜班,则获取最后一天的下一天的第一条记录,整理入库
       end;
    end;