前言:漂亮的人事小姐姐找我帮忙弄考勤:由于人员考勤和门禁一起,打卡记录太多,打卡机只能导出一个打卡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表筛选人员迟到早退缺勤的更多相关文章

  1. mybatis 逆向工程(通过数据库表针对单表自动生成mybatis执行所需要的代码)

    mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.xml.pojo…),可以让程序员 ...

  2. Idea根据表自动生成实体

    Idea根据表自动生成实体: 首先说下这种方式有个缺点,就是如果表里面有日期.时间类型,那么需要手动的设置映射类型 第一步:在Idea中配置好数据库: 在Idea窗口右边,点击Database按钮 配 ...

  3. Go语言根据数据表自动生成model以及controller代码

    手写model的用法请参考: https://www.jianshu.com/p/f5784b8c00d0 这里仅说明自动生成model文件的过程 bee generate appcode -tabl ...

  4. mybits根据表自动生成 java类和mapper 文件

    mybits根据表自动生成 java类和mapper 文件 我这个脑子啊,每次创建新的工程都会忘记是怎么集成mybits怎么生成mapper文件的,so today , I can't write t ...

  5. 基于querybuilder的可根据现有数据表自动生成Restful API的dotnet中间件

    AutoApi 基于SqlKata Query Builder的可根据数据表自动生成Restful API的dotnet中间件 项目地址 Github Gitee 支持的数据库 MySql AutoA ...

  6. Mybatis根据数据库中的表自动生成Bean对象与Mapper文件 (小白式教程)

    示例IDE采用 IDEA //**********************华丽的分割线****************// 1.新建一个java项目-->在Src目录下创建3个包(Package ...

  7. 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍

    LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...

  8. 第二篇 Springboot mybatis generate根据数据库表自动生成实体类、Mapper和Mapper.xml

    源码链接:https://pan.baidu.com/s/1iP4UguBufHbcIEv4Ux4wDw 提取码:j6z9 目录结构如下:只需增加一个generatorConfig.xml文件和在po ...

  9. 通过数据库表自动生成POJO(JavaBean)对象

    主类: package bqw.tool; import java.util.ResourceBundle;import java.sql.DriverManager;import java.sql. ...

随机推荐

  1. python字符编码-文件操作

    字符编码 字符编码历史及发展 为什么有字符编码 ''' 原因:人们想要将数据存入计算机 计算机的能存储的信息都是二进制的数据 内存是基于电工作的,而电信号只有高低频两种,就用01来表示高低电频,所以计 ...

  2. wscript.shell 使用

    <%@ Page Language="VB" validateRequest = "false" aspcompat = "true" ...

  3. memcached.c 源码分析

    上文分析了memcached的autoconf过程以及configure, make过程,可以看到,memcached可执行文件是由memcached-memcached.o以及其他文件连接后编译出来 ...

  4. x32下PsSetLoadImageNotifyRoutine的逆向

    一丶简介 纯属兴趣爱好.特来逆向玩玩. PsSetLoadImageNotifyRoutine 是内核中用来监控模块加载.操作系统给我们提供的回调. 我们只需要填写对应的回调函数原型即可进行加监控. ...

  5. 在 dotnet core (C#)下的颜色渐变

    直接使用等比例抽样算法,连同透明度一起计算. public IList<Color> ShadeColors(Color c1, Color c2, int resultCount) { ...

  6. vue-cli3.0创建项目报npm install --loglevel error 踩坑的那把辛酸泪

    创建项目 vue create vue-pro 然后如下图 一开始以为是npm的问题,卸载了Mac的node ,安装nvm,然后再安装node (可参考: Mac中nvm的安装和使用   https: ...

  7. Shiro权限管理框架(三):Shiro中权限过滤器的初始化流程和实现原理

    本篇是Shiro系列第三篇,Shiro中的过滤器初始化流程和实现原理.Shiro基于URL的权限控制是通过Filter实现的,本篇从我们注入的ShiroFilterFactoryBean开始入手,翻看 ...

  8. JS 中构造函数和普通函数的区别

    原来只是随意的了解了下 , 但是最近有点忘了 于是详细了解下 加深下印象. 1.构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写 2.构造函数和普通函数的区别在于:调用方式 ...

  9. 记一次织梦cms渗透测试

    记一次织梦cms渗透测试 0x01 前言 本次测试的整个流程:枚举用户名-针对性暴破-登录后台-后台编辑php文件getshell. 0x02 过程 1.登录功能模块存在用户名枚举缺陷,利用此权限先枚 ...

  10. openjdk:8u22-jre-alpine在java开发中的NullPointerException错误解决方案

    问题描述 ** 在SpringBoot项目中使用了Ureport报表组件, 打包发布部署到docker中启动报错 ** java.lang.NullPointerException at sun.aw ...