每个数据单独一个 SQL 比较好写,如果整个的一个 SQL 查出所有数据,就不是一般的难。

以下 SQL 未经严格测试,且有前提条件:每天每个人只能上班打卡一次。

出勤率 = 上班打卡次数/工作日数 , 这个需要测试,应该还需要关联用户表。

(select count(*)  from manualsign s where ms_time> ? and ms_time < ? )

/(select count(*)  from tbl_worktime w2 where wt_uptime> ? and wt_uptime < ?)

迟到次数 = "上班打卡时间"在同一天的"上班时间" 之前

select count(*) from manualsign s

where exists(select 1 from tbl_worktime w where to_char(s.ms_time,'yyyymmdd') = to_char(w.wt_uptime,'yyyymmdd')

and s.ms_time < w.wt_uptime

and wt_uptime> ? and wt_uptime < ?

)

and s.ms_tag = 1

and ms_time> ? and ms_time < ?

早退次数 = "下班打卡时间"在同一天的"下班时间" 之前

select count(*) from manualsign s

where exists(select 1 from tbl_worktime w where to_char(s.ms_time,'yyyymmdd') = to_char(w.wt_uptime,'yyyymmdd')

and s.ms_time < w.wt_downtime

and wt_uptime> ? and wt_uptime < ?

)

and s.ms_tag = 0

and ms_time> ? and ms_time < ?

旷工次数 = 工作日中无上班打卡的次数,应该还需要关联用户表。

select count(*) from tbl_worktime w

where wt_uptime> ? and wt_uptime < ?

and not exists(select 1 from manualsign s where to_char(s.ms_time,'yyyymmdd') = to_char(w.wt_uptime,'yyyymmdd')  )

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐