求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' /*月份参数*/

就把这个人这个月的那条数据取出来,然后读取从day1 ...day31的数据,一个个去取里面的值,判断当天是迟到,早退,还是请假、生病,是哪个给哪个的值加一,一圈下来数据就都出来了。

SELECT a.员工姓名,

(SELECT CASE WHEN 考勤时间 >9点 THEN '迟到' END from 考勤表 where 员工卡id=a.员工卡id and 考勤时间<当天12:00) as '早',

(SELECT CASE WHEN 考勤时间 《 17点30 THEN '早退' END from 考勤表 where 员工卡id=a.员工卡id and 考勤时间>当天12:00) as '晚',

(SELECT CASE WHEN COUNT(1)=0 then '是' ELSE '' END from 考勤表 where 员工卡id=a.员工卡id) as '旷工',

from 员工表 a

没考虑重复打卡情况。

自己根据具体翻译一下吧,我的思路也就这样了。水平有限 ,勿喷。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存