求mysql大佬指教,mysql考勤查询

求mysql大佬指教,mysql考勤查询,第1张

1、维护数据

员工表

考勤表

2、查询迟到、早退数据

3、sql

SELECT

T.emp_no,

T.username,

T1.attendace_time,

T1.start_time,

T1.end_time,

CASE

WHEN DATE_FORMAT(T1.start_time, '%H') >= '09' THEN

'迟到'

END AS start_time_flag,

CASE

WHEN DATE_FORMAT(T1.end_time, '%H') <'17' THEN

'早退'

END AS end_time_flag

FROM

`员工表` T

INNER JOIN `考勤表` T1 ON T.emp_no = T1.emp_no

WHERE

DATE_FORMAT(T1.attendace_time, '%Y%m') = '201909' /*月份参数*/

sql格式文件可以直接用记事本或者编辑器来打卡。

如果是要导入到MYSQL的话,在CMD下面:

cmd>d:/mysql/bin/mysql.exe

-h

主机

-u

用户名

-p

库名

<

sql文件绝对路径

然后回车输入密码

d:/mysql/bin/mysql.exe

这里替换为你本机mysql.exe的路径

select user_id,DATE_ADD(MAX(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) ,DATE_ADD(MIN(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) from checkinout group by user_id,DATE_FORMAT(DATE_SUB(checktime,INTERVAL 4 hour),'%Y-%m-%d')

试一下上面的sql语句, 我觉得可以实现你的要求,解决思路就是肯定要分组,普通情况我们分组是同一天分在一组,这样会导致比如'2016-07-13 03:00:00' 这种时间会分在07-13号这一天里 ,按你的要求应该分在07-12这天里 才对,,所以我们把时间减去四个小时然后再分组,DATE_SUB(checktime,INTERVAL 4 hour) 这个就是减去四个小时,然后用DATE_FORMAT 格式化成年月日的格式进行group by,select 的时候 MAX(DATE_SUB(checktime,INTERVAL 4 hour),min(...) 这个是查减了四小时的最大值和最小,也就是当天离开时间和到公司时间(减四小时),在用DATE_ADD 加四个小时,就是原本离开时间和到公司时间


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7502066.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存