读卡机读到数据库表中的内容如下 
卡号 工号    部门          刷卡日期 刷卡时间 读卡机名称 
20001 60001  A001          2009-8-5 08:25:23 上班 
20001 60001  A001          2009-8-5 17:25:23 下班 
20001 60001  A001          2009-8-7 19:35:47 上班 
20001 60001  A001          2009-8-8 08:25:23 下班 
其中前2条为白班的记录,后2条为夜班的记录,从晚上8点到第二天早上8点,一天如果多次刷上下班卡,上班取最晚时间,下班取最早时间,现在我要得到如下格式卡号 工号    部门          上班刷卡时间         下班刷卡时间
20001 60001  A001          2009-8-5 08:25:23    2009-8-5 17:25:23           
20001 60001  A001          2009-8-7 19:35:47    2009-8-8 08:25:23          

解决方案 »

  1.   

    比如取最早上班时间就这样
    select 
      卡号,工号,部门,刷卡日期,min(刷卡时间),读卡机名称
    from 
      tb
    group by
      卡号,工号,部门,刷卡日期,读卡机名称
    最晚下班时间就用max
      

  2.   


    导出excel,交给hr,他们很会算的; 需要更多条件,你这给出的简单了
      

  3.   

    select 卡号,工号,刷卡日期,
        上班时间=max(case [读卡机名称] when '上班' then [刷卡日期]+' '+[刷卡时间] end),
        下班时间=min(case [读卡机名称] when '下班' then [刷卡日期]+' '+[刷卡时间] end)
    from tb
    group by 卡号,工号,刷卡日期
    ---
    20001 60001 2009-8-5 2009-8-5 08:25:23 2009-8-5 17:25:23
    20001 60001 2009-8-7 2009-8-7 19:35:23 NULL
    20001 60001 2009-8-8 NULL                 2009-8-8 08:25:23
    这样写的结果不是我想要的
      

  4.   

    表设计有些问题,个人意见,把题抄下来了,先MARK,我先想想