我们的人事考勤系统有个自定义查询功能,现想做一个自定义查询.考勤系统中打卡有4个时间 先把他命名DATETIME1,DATETIME2,DATETIME3,DATETIME4,员工卡号 字段名为CARDNO ,考勤数据表名为 KQ_SOURCE  请问 怎么才能做到查出连续3天没打卡的人员名单.  本人新手没多少分,如果哪为大哥能解决 本人愿意给全部分数.

解决方案 »

  1.   

    表结构是什么?
    DATETIME1,DATETIME2,DATETIME3,DATETIME4--这个是数据还是字段?
      

  2.   

    select * into temp from
    (
      select CARDNO,DATETIME1 DATETIME from KQ_SOURCE 
      union all
      select CARDNO,DATETIME2 DATETIME from KQ_SOURCE 
      union all
      select CARDNO,DATETIME3 DATETIME from KQ_SOURCE 
      union all
      select CARDNO,DATETIME4 DATETIME from KQ_SOURCE 
    )
    order by CARDNO,DATETIME对上面的临时表用循环来判断
      

  3.   

    如果没打卡的话 KQ_SOURCE 里面所有DATETIME是没有记录的,也就是说能不能判断连续3天没有记录的CARDNO谢谢楼上两位大哥...
      

  4.   

    DATETIME 是字段名  这些DATETIME和CARDNO 都是表KQ_SOURCE里面的字段
      

  5.   

    select * into # from
    (
      select CARDNO,DATETIME1 DATETIME from KQ_SOURCE 
      union all
      select CARDNO,DATETIME2 DATETIME from KQ_SOURCE 
      union all
      select CARDNO,DATETIME3 DATETIME from KQ_SOURCE 
      union all
      select CARDNO,DATETIME4 DATETIME from KQ_SOURCE 
    ) aselect CARDNO from (
    select a.CARDNO,a.DATETIME1,min(b.DATETIME1) DATETIME2 from # a left join # b
    on a.CARDNO=b.CARDNO and a.DATETIME1<b.DATETIME1
    group by CARDNO)a where 
    datediff(dd,a.DATETIME1,b.DATETIME2)>=3