人员考勤,MySQLl数据库一个表自动生成3表筛选人员迟到早退缺勤
前言:漂亮的人事小姐姐找我帮忙弄考勤:由于人员考勤和门禁一起,打卡记录太多,打卡机只能导出一个打卡Excel总表,不容易人工筛选。
Excel表的格式是这样的:(这里101代替真实人名)
实现目标:
8:30上班,5:30下班,可以导出工作日来公司人员迟到早退和没来公司人员的缺勤情况表,这两个结果表。
也可以导出每人每天最早打卡最晚打卡记录表。
这个表需要导入MySQL数据库进行筛选。迟到早退好判断,其实这里最难判断的是全天缺勤,因为打卡机没有任何记录。
需要自动生成人员表(把不打卡人去掉),上班日期表(把非工作日去掉),打卡表(每人每天最早最晚打卡)3个表联查的。
1.先把Excel表格转下格式(分列)
转完后格式这样了
2.把表格导入MySQL数据库
3.因为人员在变动,每回给的打卡表人员不会一模一样,需要自动生成人员表(把不打卡人去掉),上班日期表(把非工作日去掉),打卡表(每人每天最早最晚打卡)3个表联查的。-- -- 删除不用打卡记录人员
-- -- 删除不用打卡记录人员
DELETE FROM `考勤明细` WHERE `姓名` IN ('boss','张总','钟总','吴总');
--
-- --创建上班日期表动态:超过一半人打卡加班算工作日:80是全体人员每天打卡次数,超过80代表上班日期,正常一天打卡110左右,周末单独来公司开门打卡的人不会超过80次打卡
DROP TABLE if exists d;
CREATE TABLE d (SELECT `日期时间` FROM `考勤明细` WHERE (f5 <'08:30:00') OR (f5 >'17:30:00') GROUP BY `日期时间` HAVING COUNT(`姓名`) > 80);
-- SELECT * FROM d;
--
-- -- 创建人员临时表格
DROP TABLE if exists u;
CREATE TABLE u (SELECT `姓名` FROM `考勤明细` GROUP BY `姓名`);
-- SELECT * FROM u;
--
-- -- 创建考勤明细表
DROP TABLE if exists k;
CREATE TABLE k (SELECT * ,min(`f5`) as "最早打卡", max(`f5`) as "最晚打卡" FROM `考勤明细` GROUP BY `姓名`,`日期时间` ORDER BY `日期时间`,`姓名`);
-- SELECT * FROM k ORDER BY `姓名`,`日期时间`; -- 早上没打卡-- -- 晚上没打卡,这应该链接上班日期d表
SELECT `姓名`,`日期时间`,`f4` as '星期',`最早打卡`,`最晚打卡`,'迟到' FROM k WHERE `最早打卡` >'08:30:00' AND f4 !='星期日' AND f4 !='星期六'
UNION
SELECT `姓名`,`日期时间`,`f4` as '星期',`最早打卡`,`最晚打卡`,'早退' FROM k WHERE `最晚打卡` <'17:30:00' AND f4 !='星期日' AND f4 !='星期六' ORDER BY `姓名`,`日期时间`; 第2种写法:
(SELECT k.`姓名`,k.`日期时间`,k.`f4` as '星期',k.`最早打卡`,k.`最晚打卡`,'迟到' FROM k RIGHT JOIN d on k.`日期时间` = d.`日期时间` WHERE k.`最早打卡` >'08:30:00')
UNION
(SELECT k.`姓名`,k.`日期时间`,k.`f4` as '星期',k.`最早打卡`,k.`最晚打卡`,'早退' FROM k RIGHT JOIN d on k.`日期时间` = d.`日期时间` WHERE `最晚打卡` <'17:30:00' )
ORDER BY `姓名`,`日期时间`; --
-- 早上也没打卡,晚上也没打卡,但是来了(这个不用了,上面能查出来)
-- SELECT * FROM t2 WHERE `最早打卡` >'08:30:00' AND `最晚打卡` <'17:30:00' AND f4 !='星期日' AND f4 !='星期六' GROUP BY `姓名`,`日期时间` --
-- SELECT k.*,'全天缺勤' from d INNER join u on 1=1 LEFT join k on u.`姓名`= k.`姓名` order by d.`日期时间`,k.`姓名`;
-- select b.*,'全天缺勤' from k a
right join (select * from u b,(select distinct `日期时间` from d) c) b on a.`姓名`=b.`姓名` and a.`日期时间`=b.`日期时间`
WHERE a.`姓名` IS NULL
--
结果如下
好了,可以给小姐姐了。
人员考勤,MySQLl数据库一个表自动生成3表筛选人员迟到早退缺勤的更多相关文章
- mybatis 逆向工程(通过数据库表针对单表自动生成mybatis执行所需要的代码)
mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.xml.pojo…),可以让程序员 ...
- Idea根据表自动生成实体
Idea根据表自动生成实体: 首先说下这种方式有个缺点,就是如果表里面有日期.时间类型,那么需要手动的设置映射类型 第一步:在Idea中配置好数据库: 在Idea窗口右边,点击Database按钮 配 ...
- Go语言根据数据表自动生成model以及controller代码
手写model的用法请参考: https://www.jianshu.com/p/f5784b8c00d0 这里仅说明自动生成model文件的过程 bee generate appcode -tabl ...
- mybits根据表自动生成 java类和mapper 文件
mybits根据表自动生成 java类和mapper 文件 我这个脑子啊,每次创建新的工程都会忘记是怎么集成mybits怎么生成mapper文件的,so today , I can't write t ...
- 基于querybuilder的可根据现有数据表自动生成Restful API的dotnet中间件
AutoApi 基于SqlKata Query Builder的可根据数据表自动生成Restful API的dotnet中间件 项目地址 Github Gitee 支持的数据库 MySql AutoA ...
- Mybatis根据数据库中的表自动生成Bean对象与Mapper文件 (小白式教程)
示例IDE采用 IDEA //**********************华丽的分割线****************// 1.新建一个java项目-->在Src目录下创建3个包(Package ...
- 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍
LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...
- 第二篇 Springboot mybatis generate根据数据库表自动生成实体类、Mapper和Mapper.xml
源码链接:https://pan.baidu.com/s/1iP4UguBufHbcIEv4Ux4wDw 提取码:j6z9 目录结构如下:只需增加一个generatorConfig.xml文件和在po ...
- 通过数据库表自动生成POJO(JavaBean)对象
主类: package bqw.tool; import java.util.ResourceBundle;import java.sql.DriverManager;import java.sql. ...
随机推荐
- 通过sysbench工具实现MySQL数据库的性能测试
1.背景 sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试.sysbench 支持的测试有CPU运算性能测试.内存分配及传输速度测试.磁盘IO性能测试.POS ...
- 【Spring】No converter found for return value of type: class java.util.ArrayList
错误信息: org.springframework.http.converter.HttpMessageNotWritableException: No converter found for ret ...
- 从原理层面掌握HandlerMethod、InvocableHandlerMethod、ServletInvocableHandlerMethod的使用【一起学Spring MVC】
每篇一句 想当火影的人没有近道可寻,当上火影的人同样无路可退 前言 HandlerMethod它作为Spring MVC的非公开API,可能绝大多数小伙伴都对它比较陌生,但我相信你对它又不是那么的生疏 ...
- Java性能调优的11个实用技巧
译文出处: ITeye 原文出处:dzone 大多数开发人员认为性能优化是个比较复杂的问题,需要大量的经验和知识.是的,这并不没有错.诚然,优化应用程序以获得最好的性能并不是一件容易的事情,但这 ...
- 5.Go-封装、继承、接口、多态和断言
面向对象 Go语言开发者认为:面向对象就是特定类型(结构体)有着自己的方法,利用这个方法完成面向对象编程, 并没有提封装.继承.多态.所以Go语言进行面向对象编程时,重点在于灵活使用方法. Go语言有 ...
- oracle 断电启动失败:ORA-00600: internal error code, arguments
转载地址: http://www.2cto.com/database/201312/261602.html 由于服务器断电,启动 oracle 时报 ORA-00600 错误 查看 oracle tr ...
- Java下载文件方法
public static void download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径. F ...
- dotnetcore 与 hbase 之二——thrift 客户端的制作
说明 在上一篇文章dotnetcore 与 hbase 之一--hbase 环境准备结束后,我们已经有了 hbase 数据库环境.接下来就可以利用 thrift 生成 c# hbase 客户端了.如果 ...
- 使用python画2D线条
"""用于验证整体趋势正确性,不做关闭操作时保持显示""" #!python3 #-*- coding:utf-8 -*- import m ...
- HTML之必备meta标签
meta标签写在HTML的<head>中,推荐每个手机H5页面必加以下的代码: <head> <meta charset="UTF-8"> &l ...