SQL查询的考勤时间没有了

时间:2014-05-03 09:48:04

标签: mysql sql

我的时间出勤数据库每行都有下表

EmpCode        Date          Time        
100            2013/10/01    08:00:00    
100            2013/10/01    08:14:12    
100            2013/10/01    12:55:11    
100            2013/10/01    13:00:00    
100            2013/10/01    16:01:00    
100            2013/10/01    16:01:05    
100            2013/10/02    16:01:00    
100            2013/10/02    16:30:45    
100            2013/10/03    08:25:00    
100            2013/10/04    08:04:00    
100            2013/10/04    15:55:00    

我需要搜索时间范围:

  1. Min(在06:00:00至12:00:00之间)为intime

  2. Max(13:00:00至22:00:00之间)作为停留时间

  3. 和intime必须在08:05:00,如果有人迟到,则会在分钟晚些时候显示并强调intime

  4. 并且如果有人快速退回并且突显显示停工时间,那么停机时间必须为16:00:00

  5. 例如,我需要的结果如下:

    EmpCode          Date                 intime       outtime      late      back
    100              2013/10/01           08:00:00     16:01:05      
    100              2013/10/02                        16:30:45     forget
    100              2013/10/03           08:25:00                  20        forget
    100              2013/10/04           08:04:00     15:55:00               5
    

2 个答案:

答案 0 :(得分:0)

SELECT 
  EmpCode, 
  `date`,
  MIN(`time`) AS intime,
  MAX(`time`) AS outtime,
  IF(TIME_TO_SEC(SUBTIME('8:05:00',MIN(`time`))) < 0, 'late','not late') AS late 
FROM 
  your_table_name 
GROUP BY 
  EmpCode

答案 1 :(得分:0)

结果是

EmpCode日期时间间隔时间
100 2013/10/01 08:00:00 16:01:05
100 2013/10/02 16:30:45 16:30:45
100 2013/10/03 08:25:00 08:25:00
100 2013/10/04 08:04:00 15:55:00

当人们忘记在早上或下午登记时,这是不正确的 因为MIN(time)AS intime,MAX(time)AS outtime,

如果每天只在早上注册结果:

EmpCode日期时间间隔时间
100 2013/10/03 08:25:00 08:25:00

如果每天只在下午登记结果: EmpCode日期时间间隔时间
100 2013/10/02 16:30:45 16:30:45

如果您可以将忘记时间替换为00:00:00或null

EmpCode日期时间间隔时间
100 2013/10/03 08:25:00 00:00:00

EmpCode日期时间间隔时间
100 2013/10/03 08:25:00

非常感谢您提出的问题 抱歉,我的英语不好

warat