急,高分求答!写一段mysql脚本,查询某个部门所有员工的考勤明细和考勤状态,要完整可用的sql脚本

有四张表,分别是部门,员工,签到,时间(是否工作日),表结构如下:

部门department:

图片说明

员工employee:
图片说明

签到sign_record:
图片说明

时间deal_calendar:

图片说明

表结构和测试数据sql脚本:

/*
Navicat MySQL Data Transfer

Source Server         : guangda
Source Server Version : 80013
Source Host           : 127.0.0.1:3306
Source Database       : guangda

Target Server Type    : MYSQL
Target Server Version : 80013
File Encoding         : 65001

Date: 2019-01-25 09:08:09
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for deal_calendar
-- ----------------------------
DROP TABLE IF EXISTS `deal_calendar`;
CREATE TABLE `deal_calendar` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` date DEFAULT NULL COMMENT '交易日历表',
  `isDealDay` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'N' COMMENT '是否交易日,Y是,N不是',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of deal_calendar
-- ----------------------------
INSERT INTO `deal_calendar` VALUES ('1', '2018-09-01', 'N');
INSERT INTO `deal_calendar` VALUES ('2', '2018-09-02', 'N');
INSERT INTO `deal_calendar` VALUES ('3', '2018-09-03', 'Y');
INSERT INTO `deal_calendar` VALUES ('4', '2018-09-04', 'Y');
INSERT INTO `deal_calendar` VALUES ('5', '2018-09-05', 'Y');
INSERT INTO `deal_calendar` VALUES ('6', '2018-09-06', 'Y');
INSERT INTO `deal_calendar` VALUES ('7', '2018-09-07', 'Y');
INSERT INTO `deal_calendar` VALUES ('8', '2018-09-08', 'N');
INSERT INTO `deal_calendar` VALUES ('9', '2018-09-09', 'N');
INSERT INTO `deal_calendar` VALUES ('10', '2018-09-10', 'Y');
INSERT INTO `deal_calendar` VALUES ('11', '2018-09-11', 'Y');
INSERT INTO `deal_calendar` VALUES ('12', '2018-09-12', 'Y');
INSERT INTO `deal_calendar` VALUES ('13', '2018-09-13', 'Y');
INSERT INTO `deal_calendar` VALUES ('14', '2018-09-14', 'Y');
INSERT INTO `deal_calendar` VALUES ('15', '2018-09-15', 'N');
INSERT INTO `deal_calendar` VALUES ('16', '2018-09-16', 'N');
INSERT INTO `deal_calendar` VALUES ('17', '2018-09-17', 'Y');
INSERT INTO `deal_calendar` VALUES ('18', '2018-09-18', 'Y');
INSERT INTO `deal_calendar` VALUES ('19', '2018-09-19', 'Y');
INSERT INTO `deal_calendar` VALUES ('20', '2018-09-20', 'Y');
INSERT INTO `deal_calendar` VALUES ('21', '2018-09-21', 'Y');
INSERT INTO `deal_calendar` VALUES ('22', '2018-09-22', 'N');
INSERT INTO `deal_calendar` VALUES ('23', '2018-09-23', 'N');
INSERT INTO `deal_calendar` VALUES ('24', '2018-09-24', 'Y');
INSERT INTO `deal_calendar` VALUES ('25', '2018-09-25', 'Y');
INSERT INTO `deal_calendar` VALUES ('26', '2018-09-26', 'Y');
INSERT INTO `deal_calendar` VALUES ('27', '2018-09-27', 'Y');
INSERT INTO `deal_calendar` VALUES ('28', '2018-09-28', 'Y');
INSERT INTO `deal_calendar` VALUES ('29', '2018-09-29', 'N');
INSERT INTO `deal_calendar` VALUES ('30', '2018-09-30', 'N');

-- ----------------------------
-- Table structure for department
-- ----------------------------
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序列号',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '部门名字',
  `status` int(11) DEFAULT NULL COMMENT '部门状态 0不可用,1可用',
  `no_permission_floors` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '无权限进入的门',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of department
-- ----------------------------
INSERT INTO `department` VALUES ('1', '固定收益部', '1', null);
INSERT INTO `department` VALUES ('2', '资本市场部', '1', null);

-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序列号',
  `faceId` varchar(255) DEFAULT NULL COMMENT '注册人脸库人脸id',
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '员工姓名',
  `empNO` varchar(64) NOT NULL COMMENT '员工编号',
  `cardNO` int(32) DEFAULT NULL,
  `postId` int(11) DEFAULT NULL COMMENT '关联岗位表id',
  `dept` int(11) DEFAULT NULL COMMENT '关联部门表id',
  `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '员工密码',
  `entryTime` date DEFAULT NULL COMMENT '入职时间',
  `birthday` date DEFAULT NULL COMMENT '员工生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别,M男,F女',
  `isblacklist` int(2) DEFAULT '0' COMMENT '是否黑名单 0不是,1是',
  `vip` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT 'N' COMMENT '是否vip,N不是,Y是',
  `tel` varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '电话号码',
  `img` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '头像地址',
  `status` int(2) DEFAULT '1' COMMENT '0无效,1有效',
  `faceToken` varchar(255) DEFAULT NULL COMMENT '人脸token',
  `updateTime` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注,VIP客户企业',
  UNIQUE KEY `主索引` (`id`),
  UNIQUE KEY `uk_empNo` (`empNO`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES ('1', null, '张三', 'zhangsan', '1', null, '1', null, null, '1990-10-12', 'F', '0', 'N', null, null, '1', 'zhangsan', null, null);
INSERT INTO `employee` VALUES ('2', null, '李四', 'lisi', '3', null, '1', null, null, '1982-12-16', 'M', '0', 'N', null, null, '1', 'lisi', null, null);
INSERT INTO `employee` VALUES ('3', null, '王五', 'wangwu', '2', null, '2', null, null, '1990-02-01', 'M', '0', 'N', null, null, '1', 'wangwu', null, null);

-- ----------------------------
-- Table structure for sign_record
-- ----------------------------
DROP TABLE IF EXISTS `sign_record`;
CREATE TABLE `sign_record` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '序列号',
  `empNO` varchar(32) DEFAULT NULL COMMENT '员工号',
  `confidence` float DEFAULT NULL COMMENT '比对相似度',
  `cardNo` varchar(32) DEFAULT NULL COMMENT '门禁卡号',
  `signTime` datetime DEFAULT NULL COMMENT '签到时间',
  `deviceNo` int(11) DEFAULT NULL COMMENT '设备号',
  `imagePath` varchar(255) DEFAULT NULL COMMENT '头像路径',
  `type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0' COMMENT '类型,0普通,1生日,2入职100天,3入职1000天,4,最早到,5本月全勤,6陌生人,7黑名单,8领导层',
  `IO` char(1) DEFAULT NULL COMMENT '进出标识',
  `source` int(1) DEFAULT NULL COMMENT '打卡数据来源,0人',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  UNIQUE KEY `主索引` (`id`),
  KEY `index_sign_time` (`signTime`)
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of sign_record
-- ----------------------------
INSERT INTO `sign_record` VALUES ('8', 'zhangsan', null, '1', '2018-09-24 19:59:33', '512', null, '4', null, '0', '');
INSERT INTO `sign_record` VALUES ('9', 'wangwu', null, '2', '2018-09-24 20:00:26', '512', null, '0', null, '0', null);
INSERT INTO `sign_record` VALUES ('24', 'lisi', null, '3', '2018-09-24 07:32:53', '512', null, '0', null, '0', null);
INSERT INTO `sign_record` VALUES ('26', 'lisi', null, '3', '2018-09-24 18:53:42', '512', null, '0', null, '0', null);
INSERT INTO `sign_record` VALUES ('59', 'lisi', null, '3', '2018-09-30 09:08:37', '512', null, '0', null, '0', null);
INSERT INTO `sign_record` VALUES ('60', 'lisi', null, '3', '2018-09-30 18:09:16', '512', null, '0', null, '0', null);
INSERT INTO `sign_record` VALUES ('61', 'kesc', null, '2', '2018-09-29 07:20:58', '512', null, '0', null, '0', null);
INSERT INTO `sign_record` VALUES ('62', 'zhangsan', null, '1', '2018-09-26 12:22:01', '512', null, '0', null, '0', null);

完整需求:
1.员工号,姓名,月份,工作日天数,是否全勤,正常天数,迟到天数,早退天数,迟到加早退天数,全天缺席天数
2.员工号,姓名,日期,考勤类别(正常,迟到,早退,迟到加早退,全天缺席)

补充:早上8点后迟到,下午5点半前早退,非工作日加班不用计算迟到或早退

qq_21741673
洗洗脚泡泡澡 速度啊、这个字段我先放着
8 个月之前 回复

3个回答

你这个如果忘记打卡是缺勤还是算啥

在你的数据基础上写的。
先写第二个,第一个在第二个基础上统计下就行了。

-- 员工号,姓名,日期,考勤类别(正常,迟到,早退,迟到加早退,全天缺席)
-- 补充:早上8点后迟到,下午5点半前早退,非工作日加班不用计算迟到或早退
SELECT
    deal.date,
    employee.name,
    tab.empNO,
    tab.cqType 
FROM
    deal_calendar AS deal
    INNER JOIN (
    SELECT
    CASE

        WHEN
            MIN( signTime ) <= CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 08:00:00' ) 
            AND MAX( signTime ) >= CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 17:30:00' ) 
            THEN
                '正常' 
                WHEN COUNT( empNO ) = 1 
                THEN
                '打卡一次,算迟到还是算早退呢' 
                WHEN MIN( signTime ) > CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 08:00:00' ) 
                AND MAX( signTime ) > CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 17:30:00' ) 
                THEN
                    '迟到' 
                    WHEN MIN( signTime ) <= CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 08:00:00' ) 
                    AND MAX( signTime ) < CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 17:30:00' ) 
                    THEN
                        '早退' ELSE '迟到加早退' 
                        END AS 'cqType',
                    empNO,
                    DATE_FORMAT( signTime, '%Y-%m-%d' ) AS date 
                FROM
                    sign_record 
                GROUP BY
                    DATE_FORMAT( signTime, '%Y-%m-%d' ),
                    empNO 
                ) AS tab ON tab.date = deal.date 
        LEFT JOIN employee AS employee ON employee.empNO = tab.empNO
            WHERE
                deal.isDealDay = 'Y'
                -- 筛选指定月份
            -- AND DATE_FORMAT(deal.date,'%Y-%m') ='2018-09'    
UNION ALL
            SELECT
                deal.date,
                employee.name,
                employee.empNO,
                '全天缺勤' 
            FROM
                deal_calendar AS deal
                LEFT JOIN employee AS employee ON deal.date = deal.date
                LEFT JOIN sign_record AS sign ON sign.empNO = employee.empNO 
                AND deal.date = DATE_FORMAT( sign.signTime, '%Y-%m-%d' ) 
            WHERE
                deal.isDealDay = 'Y' 
                AND sign.id IS NULL 
                -- 筛选指定月份
                -- AND DATE_FORMAT(deal.date,'%Y-%m') ='2018-09'
        ORDER BY
    date ASC

测试结果
图片说明

第一个在第二个sql上统计下

-- 员工号,姓名,月份,工作日天数,是否全勤,正常天数,迟到天数,早退天数,迟到加早退天数,全天缺席天数

SELECT
tab.`name`,
tab.empNO,
    DATE_FORMAT(tab.date,'%c') AS month,
    COUNT(tab.cqType) AS workCount,
    COUNT(tab.cqType ='正常' or null) AS normalCount,
    COUNT(tab.cqType ='迟到' or null) AS lateCount,
    COUNT(tab.cqType ='早退' or null) AS earlyCount,
    COUNT(tab.cqType ='迟到加早退' or null) AS lateAndEarlyCount,
    COUNT(tab.cqType ='全天缺勤' or null) AS absenteeismCount,
    COUNT(tab.cqType ='打卡一次,算迟到还是算早退呢' or null) AS absenteeismCount

FROM (
SELECT
    deal.date,
    employee.name,
    tab.empNO,
    tab.cqType 
FROM
    deal_calendar AS deal
    INNER JOIN (
    SELECT
    CASE

        WHEN
            MIN( signTime ) <= CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 08:00:00' ) 
            AND MAX( signTime ) >= CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 17:30:00' ) 
            THEN
                '正常' 
                WHEN COUNT( empNO ) = 1 
                THEN
                '打卡一次,算迟到还是算早退呢' 
                WHEN MIN( signTime ) > CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 08:00:00' ) 
                AND MAX( signTime ) > CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 17:30:00' ) 
                THEN
                    '迟到' 
                    WHEN MIN( signTime ) <= CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 08:00:00' ) 
                    AND MAX( signTime ) < CONCAT( DATE_FORMAT( signTime, '%Y-%m-%d' ), ' 17:30:00' ) 
                    THEN
                        '早退' ELSE '迟到加早退' 
                        END AS 'cqType',
                    empNO,
                    DATE_FORMAT( signTime, '%Y-%m-%d' ) AS date 
                FROM
                    sign_record 
                GROUP BY
                    DATE_FORMAT( signTime, '%Y-%m-%d' ),
                    empNO 
                ) AS tab ON tab.date = deal.date 
        LEFT JOIN employee AS employee ON employee.empNO = tab.empNO
            WHERE
                deal.isDealDay = 'Y'

UNION ALL
            SELECT
                deal.date,
                employee.name,
                employee.empNO,
                '全天缺勤' 
            FROM
                deal_calendar AS deal
                LEFT JOIN employee AS employee ON deal.date = deal.date
                LEFT JOIN sign_record AS sign ON sign.empNO = employee.empNO 
                AND deal.date = DATE_FORMAT( sign.signTime, '%Y-%m-%d' ) 
            WHERE
                deal.isDealDay = 'Y' 
                AND sign.id IS NULL 
) AS tab
-- 年份筛选
-- WHERE DATE_FORMAT(tab.date,'%Y') = '2018'
GROUP BY DATE_FORMAT(tab.date,'%m'),tab.empNO

测试结果
图片说明

你这个筛选条件应该是要添加的吧,感觉这样的表设计,sql报表好难啊。
有什么问题在沟通!
希望采纳,谢谢

it_zhangwei
路漫漫兮其修远兮 回复September_Lhi: 好
8 个月之前 回复
September_Lhi
September_Lhi 回复路漫漫兮其修远兮: 方便加给微信嘛,18656037803
8 个月之前 回复
it_zhangwei
路漫漫兮其修远兮 回复September_Lhi: 22和23不是工作日啊
8 个月之前 回复
it_zhangwei
路漫漫兮其修远兮 回复September_Lhi: 这个错误需要ONLY_FULL_GROUP_BY,否则意思就是你select的列都需要出现在group by中
8 个月之前 回复
it_zhangwei
路漫漫兮其修远兮 回复September_Lhi: 来了
8 个月之前 回复
September_Lhi
September_Lhi 回复路漫漫兮其修远兮: 运行第一段,报了个错,[Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'guangda.sign_record.signTime' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
8 个月之前 回复
September_Lhi
September_Lhi 回复路漫漫兮其修远兮: 可以加你微信吗,方便请教大佬
8 个月之前 回复
September_Lhi
September_Lhi 回复路漫漫兮其修远兮:两张测试的结果图你贴的是一样的,没有9月22好9月23的打卡记录啊
8 个月之前 回复
it_zhangwei
路漫漫兮其修远兮 直接给sql拷贝就可以用了
8 个月之前 回复
SELECT 员工号,卡号,姓名,日期,
       '打卡记录'  AS 考勤类型,
       Substring(日期, 1, 4)   AS 年份,
       Substring(日期, 6, 2)   AS 月份,
       Datename(weekday, 日期) AS 工作日类型,
       Min(打卡时间)             AS 上班打卡时间,
       Max(打卡时间)             AS 下班打卡时间,
       CASE
         WHEN Datename(weekday, 日期) <> '星期六'
              AND Datename(weekday, 日期) <> '星期日' THEN( CASE
                                                         WHEN Min(打卡时间) = Max(打卡时间) THEN'上班或下班忘打卡'
                                                         WHEN Min(打卡时间) > '08:00:00' THEN '迟到'
                                                         WHEN Max(打卡时间) < '17:00:00' THEN '早退'
                                                         ELSE '正常'
                                                       END )
         ELSE '非工作日打卡'
       END                   AS 状态
FROM   (SELECT a.[emp_id]                        员工号,
               a.[card_id]                       卡号,
               b.[emp_fname]                     姓名,
               CONVERT(CHAR(10), sign_time, 120) 日期,
               CONVERT(VARCHAR, sign_time, 108)  打卡时间,
               [sign_time]
        FROM   [dbo].[TimeRecords] a
               LEFT JOIN [dbo].[Employee] b
                      ON a.emp_id = b.emp_id
                         AND a.[card_id] = b.[card_id]
        WHERE  a.emp_id IS NOT NULL
               AND a.emp_id <> ''
               AND CONVERT(CHAR(10), sign_time, 120) BETWEEN '2018-09-01' AND '2018-10-30'
               AND b.[emp_fname] = '姓名') AS mm
GROUP  BY mm.员工号,
          卡号,
          姓名,
          mm.日期
ORDER  BY 员工号,
          日期 ASC 

September_Lhi
September_Lhi FROM (SELECT a.[emp_id] 这一段看不懂,运行的时候也报错了啊,You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[ emp_id ] 员工号, a.[ card_id ] 卡号, b.[ emp_fname ] 姓名, ' at line 33
7 个月之前 回复

第一个需求:
存储过程创建:

CREATE PROCEDURE check_work_proc(in deptid INT)
BEGIN
SELECT t1.empNO as ep,t1.name,CONCAT(YEAR(signTime),'-',MONTH(signTime)) AS months,
(SELECT COUNT(*) FROM deal_calendar WHERE CONCAT(YEAR(date),'-',MONTH(date))=months AND isDealDay='y') AS 工作日天数,
CASE WHEN (SELECT COUNT(DISTINCT CONCAT(YEAR(signTime),'-',MONTH(signTime),'-',DAY(signTime))) FROM sign_record WHERE CONCAT(YEAR(signTime),'-',MONTH(signTime))=months AND empNO=ep)=(SELECT COUNT(*) FROM deal_calendar WHERE CONCAT(YEAR(date),'-',MONTH(date))=months) then 'y' ELSE 'n' END    AS 是否全勤,
(SELECT COUNT(*) FROM (SELECT DATE(signTime) AS dt,empNO FROM sign_record WHERE signTime in(SELECT min(signTime) FROM sign_record GROUP BY date(signTime)) AND DATE_FORMAT(signTime,"%H:%i:%s")<='08:00:00') t3
INNER JOIN
(SELECT DATE(signTime) AS dt,empNO FROM sign_record WHERE signTime in(SELECT max(signTime) FROM sign_record GROUP BY date(signTime)) AND DATE_FORMAT(signTime,"%H:%i:%s")>='17:30:00') t4
ON 
t3.dt=t4.dt AND t3.empNO=t4.empNO
WHERE t3.empNO=ep AND CONCAT(YEAR(t3.dt),'-',MONTH(t3.dt))=months)
AS 正常天数,
(SELECT COUNT(*) FROM sign_record WHERE signTime in(SELECT min(signTime) FROM sign_record WHERE empNO=ep AND CONCAT(YEAR(signTime),'-',MONTH(signTime))=months GROUP BY date(signTime)) AND DATE_FORMAT(signTime,"%H:%i:%s")>'08:00:00' AND DATE(signTime) NOT in(SELECT date FROM deal_calendar WHERE isDealDay='N')) AS 迟到,
(SELECT COUNT(*) FROM sign_record WHERE signTime in(SELECT max(signTime) FROM sign_record WHERE empNO=ep AND CONCAT(YEAR(signTime),'-',MONTH(signTime))=months GROUP BY date(signTime)) AND DATE_FORMAT(signTime,"%H:%i:%s")<'17:30:00' AND DATE(signTime) NOT in(SELECT date FROM deal_calendar WHERE isDealDay='N')) AS 早退,
(SELECT COUNT(*) FROM (SELECT DATE(signTime) AS dt,empNO FROM sign_record WHERE signTime in(SELECT min(signTime) FROM sign_record GROUP BY date(signTime),empNO) AND DATE_FORMAT(signTime,"%H:%i:%s")>'08:00:00') t3
INNER JOIN
(SELECT DATE(signTime) AS dt,empNO FROM sign_record WHERE signTime in(SELECT max(signTime) FROM sign_record GROUP BY date(signTime),empNO) AND DATE_FORMAT(signTime,"%H:%i:%s")<'17:30:00') t4
ON 
t3.dt=t4.dt AND t3.empNO=t4.empNO
WHERE t3.empNO=ep AND CONCAT(YEAR(t3.dt),'-',MONTH(t3.dt))=months AND t3.dt NOT in(SELECT date FROM deal_calendar WHERE isDealDay='N')) AS 迟到加早退,
(SELECT COUNT(*) FROM deal_calendar WHERE date NOT in(SELECT DISTINCT CONCAT(YEAR(signTime),'-',MONTH(signTime),'-',DAY(signTime)) FROM sign_record WHERE CONCAT(YEAR(signTime),'-',MONTH(signTime))=months AND empNO=ep ) AND CONCAT(YEAR(date),'-',MONTH(date))=months AND isDealDay='y') AS 全天缺席
FROM employee t1
LEFT JOIN
sign_record t2
ON
t1.empNO=t2.empNO
WHERE dept=1
GROUP BY 1,3;
END

存储过程调用:

CALL check_work_proc(1);

测试结果:
图片说明

qq_36720114
德玛洗牙 回复September_Lhi: 哈哈,第二个写到一半有事被叫出去了就没写了
7 个月之前 回复
September_Lhi
September_Lhi 第二个怎么来着呢
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
考勤查询统计SQL脚本。
本文主要记录下平时工作中考勤统计中的SQL脚本,以便于后续翻阅,同时和大家分享一下,不足的地方还请大牛多多给与点评。  1.首先是查询某员工的考勤记录。可以根据年份,月份,或者时间段查询结果,同时也可以去掉人员筛选条件,查询多个人的考勤结果。以及计算出该员工的打卡是否正常。SQL语句如下所示:  SELECT 员工号,卡号,姓名,日期, '打卡记录' AS 考勤类型, ...
MySQL 时间函数(答学生问:关于员工考勤查询)
今天有学生问个关于MySQL时间操作的问题,直接看图:  查询某日人员的出勤时间问题。 我们都知道,企业员工考勤使用打卡方式,每天会记录每个员工的多次打卡记录,最后取每个员工的每天: 上班时间:当日最早时间; 下班时间:当日最晚时间。 所以分析查询每个员工每日考勤记录,需要根据员工分组,当天时间、时间最小和最大,时间格式化等操作,下面举例模拟该问题: 学生表student  ...
员工考勤管理系统 员工考勤管理系统
员工考勤管理系统员工考勤管理系统员工考勤管理系统员工考勤管理系统
非常完整的员工考勤管理系统
里面有员工打卡 部门管理 角色管理等功能,如果想做这方面的可以下载下来看看了
高分求一段脚本
rn我需要还原表表单的内容,但是我对JS不是很懂,又急用rn请高手帮忙rn网页如下,可以直接看的,纯htm来的rnrnrn rn rn rn rn rn rn rn rn rn rn 请选择岗位类别rn rn rn rn rn rn rn 总经理/总裁/CEOrn 副总经理/副总裁/rn 财务总裁/财务副总rn 财务总监/CFOrn 财务副总监rn 总会计师rn 投资总监/经理rn 财务经理rn 财务主任/主管rn 审计经理rn 审计主任/主管rn 税务经理rn 税务主任/主管rn 会计经理rn 会计主任/主管rn 成本经理rn 成本主任/主管rn 融资经理rn 融资主任/主管rn 预算经理rn 预算主任/主管rn 基金经理rn 信贷经理rn 信贷主任/主管rn 风险管理总监/经理rn 理财总监/经理rn 理赔总监/经理rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn 您已经选择的工作岗位(最多三个)rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rnrnrn
员工考勤及员工任务分配
JAVA写的,员工考勤以及员工任务分配,可以随时查看
求员工考勤管理系统原代码
要求:rn对正常班进行考勤统计、生成报表。rn对迟到、早退进行统计、生成报表。rn对请假情况进行处理。rn对公休日进行处理rnrnrnxdsungirl@yahoo.com.cnrn谢谢!
求一段sql脚本
在我的本地写一段脚本,每次服务器的库里面的表有更新,如增加表或者改变表结构,我这边都可以执行导出最新的表结构.rn 比如: 服务器地址为:135.34.21.31,上面有个库为A库,里面有三张表,现在在服务器的库里面新增三张表,我就得在部署文档的sql脚本里面新增这三张表,sql的脚本里面的创建表语句我都是通过语句写的,那样太麻烦,如果每次新增表,我就得在sql的脚本里面重新写这些新增表的语句.现在想写个脚本,就是告诉我新增了哪些表,只要告诉我表名,我就可以执行脚本将服务器的那些创建表的sql语句导出来
python自动考勤脚本实现
转载请注明链接 环境:ubuntu14.04 + firefox60.0.2 + python3.4 之前使用xdotool模拟鼠标键盘实现自动登录打卡考勤,但是后来公司加了验证吗,所以此方案不再适用,改由python实现。具体代码如下: ##&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;font size = &amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;4px&amp;amp;amp;amp;amp;amp;
sql考勤查询
ID CODE NAME TIMErn1 A1 张三 2012-1-1 09:00:12rn2 A1 张三 2012-1-1 12:59:11rn3 A1 张三 2012-1-1 18:00:23rn4 A2 李四 2012-1-1 08:56:32rn5 A2 李四 2012-1-1 10:59:12rn6 A2 李四 2012-1-1 12:00:08rn7 A2 李四 2012-1-1 18:12:23rnrn查询显示每天最早和最晚的记录rn结果rn1 A1 张三 2012-1-1 09:00rn3 A1 张三 2012-1-1 18:00rn4 A2 李四 2012-1-1 08:56rn6 A2 李四 2012-1-1 18:12
智能考勤系统源码员工考勤系统
签到程序供员工上下班时进行签到或签退使用,是指纹考勤系统采集考勤资料的终端程序,在月末或其它需要的时候,这些考勤资料将通过各种途径汇集到考勤管理系统,进行考勤计算和统计。
三层架构员工考勤系统
适合所有人进行应用,三层架构比较复杂。适合毕业设计的人应用,如果想要做毕业设计的人可以应用。
企业员工考勤管理系统
企业员工考勤管理系统 企业员工考勤管理系统 很经典的
员工考勤管理信息系统
系统功能基本要求 : 1. 职工信息维护; 2. 出勤记录信息; 3. 出差信息; 4. 请假信息; 5. 加班信息; 6. 统计出差天数、请假天数及加班天数。
员工考勤系统
采用jsp/servelet对于员工上下班的签到
员工考勤管理系统说明书
一.引言 1.编写目的 本文档旨在收集《员工考勤系统》的各项特性,并分析实现系统的各项需求。实现了公司员工管理自动化,提高了的工作效率,使得企业的管理工作更有序,方便,快捷 2.项目背景 考勤作为一个企业的基础管理,是企业对员工工作管理的基本依据。实际管理和记录工作非常需要快速获知各个部门员工的每日出勤情况,以便于及时向高层管理者反映员工的出勤,缺勤情况(包括迟到、早退、病假、事假、出差等情况)。我们提出基于C/S结构的网络考勤系统,实现网上考勤任务,以减轻考勤人员的工作量。我们准备开发员工考勤管理系统,完成员工基本信息维护、企业的部门信息维护、企业基本考勤类型的维护、员工考勤的管理、员工考勤的查询与分析。实现人事考勤的需要,包括员工迟到、早退、请假、旷工的情况的记录,在每个月底计算工资对员工和对员工进行绩效评估的时候,对员工整个月的考勤记录进行查询和统计。企业考勤管理系统是为了解决员工考勤管理的而设计的,目的是建立一个能够初步实现企业考勤管理系统的智能化管理,提高考勤管理效率,工作人员能够在各个岗位上的工作状态得到及时的反馈,而系统所需的工作人员的数量少,效率高。降低资源浪费,同时增强员工管理的透明度以及约束员工自觉遵守出勤制度。
java 员工考勤代码设计
毕业设计要做人事管理,考勤代码不知道如何实现,sos
ACCESS+员工考勤管理系统
考勤制度的系统化管理,运行程序可直接使用。
课程设计员工考勤管理系统
用ADO+SQL Server+VC++设计的一个员工考勤管理系统,对初学者很有帮助
员工考勤、固定资产管理软件
本软件是一套专门针对大中型企事业单位、政府机关等需要对员工信息、员工证件、员工考勤、固定资产进行管理的单位而开发的绿色智能管理软件,软件结合目前内勤事务管理的工作特点,以易用性、适用性为宗旨,全面、高效地进行办公事务管理的系统 本软件的最大特点就是简单适用、功能强大。用户无需具备很高的电脑知识,简单指点就可熟练使用本系统。信息采集除非必须键盘输入,全部实现智能导入、鼠标点选录入。最大程度的提高了工作效率。
员工考勤管理系统课程设计
此考勤管理系统基于Visual C++的MFC以及Micosoft Acess 2000,根据客户需求和实际软件发展情况设计而成。界面友好,操作简单。软件投入使用后更是能够根据客户新的需求而不断的添加和更新其功能。
员工考勤管理系统
闲暇练手。 使用mysql数据库,下载之后需要配置数据库程序才可运行
员工考勤标准模板
使用Sturts2+jsp的技术,实现对Excel的时间,内容,进行一系列的处理。通过指纹录入生成的Excel再通过本程序进行处理后生成标准模板。会得到该员工是否迟到、早退、加班、调休、工时等。现本公司正在使用。
员工考勤管理制度(2010.7.22)
上班前40分钟及下班后40分钟内为有效考勤时间;   【迟到早退】 第十七条:晚于公司规定的考勤上班时间上班的视为迟到;早于公司规定的考勤下班时间离岗的视为早退。上班时间在公司办公区域内就餐或处理其他非工作事项者每发现一次给予口头警告,并通报批评。 第十八条:员工每月迟到、早退30分钟(含30分钟)内,按1元/分钟罚款,并扣除当月全勤奖; 【旷工】 第十九条:迟到、早退或无故离岗一次...
员工考勤管理系统 java
员工考勤管理系统
员工考勤的统计
简单说明下主要字段:SID,SName,Stime,state分别是数据ID,名字,上班小时数,是否迟到(1为正常)rn现在要求统计,员工上班天数(上班小时数>7才记录一天)和上班天数中没有迟到天数rn这是第一问,rn第二问是:一年记录在一个表,现在有两年记录,有跨年的统计,要求MSSQL2000的语法,实在不行05也行
JAVA 员工考勤项目
员工上班 下班考勤,包括权限分配,人员请假,人员销假,离职等功能模块。以及班次的设置等。
考勤信息(员工打卡)
实现员工的添加,查询和删除,并用dgvList显示出来 1.1///先声明一个单列集合 public List list = new List(); 1.2///初始化三个对象 private void FrmMain_Load(object sender, EventArgs e) { SE s1 = new SE();
企业员工考勤管理子系统
企业员工考勤管理子系统企业员工考勤管理子系统
Asp.NET员工考勤系统
很实用的参考项目,有数据库和源代码和设计文档
员工考勤管理系统论文
考勤管理系统论文考勤管理系统论文考勤管理系统论文考勤管理系统论文
第三章 员工考勤信息管理
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace day03_员工考勤信息管理 { public class dakalei { public Date
员工考勤管理系统需求说明书
一、.引言 3 1.1 实验目的 3 1.2 项目背景 3 1.3 参考资料 3 二、设备与环境 3 三、实验内容及分析 3 1 需求工程 3 1.1 功能需求 3 1.2数据流图 4 1.3 E-R图 6 2.软件设计 7 2.1 总体设计 7 2.2数据库设计 8 2.2.1表结构分别如下 8 2.2.2各表之间关系图 10 2.3详细设计 10 3.系统实现 11 3.1展显屏的设计 11 3.2登录界面的设计 11 3.3主界面设计 12 3.4查询结果显示的界面 14 4测试结果 15 4.1登录模块测试 15 4.2主界面模块测试 16 4.2.1签到测试 16 4.2.2签离操作 16 4.2.3删除打操作 17 4..2.4查询操作 17
实现员工上下班考勤
下面告诉大家如何来制作一个上下班的考勤,如下图大家可以看到,所谓考勤就是考勤你在上班时间段,是否有打卡或者签到,然后记录到你当前打卡那一刻的时间,保存到考勤记录中,对个人信息进行签到。考勤如下图: 考勤表属于待机状态,所有的信息值都是为空的,只有时间表在动,当你要打卡的时候,你把卡放到感应器上,感应器就会感应到你的个人信息,在没有卡的情况下,你可以通过输入你的员号来进行签到,在相应的地...
员工考勤管理系统Employee_manager
实习生做的考勤管理 Employee_manager
ssh员工考勤
基友ssh框架下java后台的web开发,项目只是实现了部分功能,谨慎下载
员工任务和考勤管理系统
WeTogether员工考勤管理及任务管理系统1.0主要用于企事业单位在局域网上或者互联网上进行考勤打卡管理、任务管理、项目管理等网络化、无纸化协同办公。 关键字:考勤打卡管理,任务管理,项目管理,协同办公,考勤管理,打卡管理,网上打卡,员工考勤,任务调度
员工考勤统计软件
可以根据指纹机中员工的打卡情况对员工的加班、迟到、请假等考勤情况进行统计。
VC++员工考勤信息系统
该系统式基于VC++编的一个建议考勤系统,适合初学者学习,希望对各位有帮助
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview