如何跨月统计请假天数,出差天数。。

完美灬缺陷 2013-12-30 10:44:13
比如已员工表
DROP TABLE IF EXISTS `t_yg`;
CREATE TABLE `t_yg` (
`ygbh` int(11) NOT NULL AUTO_INCREMENT,
`ygxm` varchar(40) NOT NULL,
PRIMARY KEY (`ygbh`)
);
请假出差记录表
DROP TABLE IF EXISTS `t_evection`;
CREATE TABLE `t_evection` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`create_time` varchar(40) DEFAULT NULL,
`start_time` varchar(40) DEFAULT NULL,
`end_time` varchar(40) DEFAULT NULL,
`type` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
如何按月统计请假天数,出差天数呢。
请假记录里面开始时间,与结束时间是跨月的情况,有如何统计呢?
...全文
707 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
完美灬缺陷 2014-01-09
  • 打赏
  • 举报
回复
忘记结贴了,解决办法:请假记录通过审批时,在弄个员工每天的请假明细表。然后在对这个表进行统计。
ACMAIN_CHM 2013-12-31
  • 打赏
  • 举报
回复
创建辅助日历表如下 create table canlendar(cdate date primary key); insert into canlendar values ('2013-01-01'),('2013-01-02'),('2013-01-03'),('2013-01-04'),('2013-01-05'),('2013-01-06'), ... ('2013-12-25'),('2013-12-26'),('2013-12-27'),('2013-12-28'),('2013-12-29'),('2013-12-30'),('2013-12-31') 然后可以直接查询。 select user_id,DATE_FORMAT(a.cdate,'%y-%m'),count(*) from canlendar a,t_evection b where a.cdate between b.start_time and b.end_time group by user_id,DATE_FORMAT(a.cdate,'%y-%m');
rucypli 2013-12-30
  • 打赏
  • 举报
回复
跨月记录加两条记录 一条月末的 一条月初的
WWWWA 2013-12-30
  • 打赏
  • 举报
回复
DATEDIFF不行? DATEDIFF(expr1,expr2) DATEDIFF() returns expr1 – expr2 expressed as a value in days from one date to the other. expr1 and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation. mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); -> 1 mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31'); -> -31
澤蛟 2013-12-30
  • 打赏
  • 举报
回复
是不是考虑写个存储过程,对每条请假记录处理,以请假开始日期为变量,判断是否跨月,是否工作日,然后赋值0或1给变量请假天数,这样日期循环加1至大于请假结束日期。所得记录插入一张表,工号,月份,请假天数。然后在对这个表进行统计。
WWWWA 2013-12-30
  • 打赏
  • 举报
回复
MYSQL不支持递归查询,生成所有日期明细表,与工作表连接后再进行处理
完美灬缺陷 2013-12-30
  • 打赏
  • 举报
回复
引用 9 楼 WWWWA 的回复:
[quote=引用 7 楼 huangchenliang 的回复:] [quote=引用 6 楼 WWWWA 的回复:] userid=1:请假天数 为什么是1? 2013-08-20 -  2013-09-08?
请假天数是按月统计出来的结果, 1 那个结果我乱写的额。[/quote] 写出正确的结果 2013-08-20 -  2013-09-08? 请假天数是多少?4? [/quote] 9天,就是8月20号到 8月31号
WWWWA 2013-12-30
  • 打赏
  • 举报
回复
引用 7 楼 huangchenliang 的回复:
[quote=引用 6 楼 WWWWA 的回复:] userid=1:请假天数 为什么是1? 2013-08-20 -  2013-09-08?
请假天数是按月统计出来的结果, 1 那个结果我乱写的额。[/quote] 写出正确的结果 2013-08-20 -  2013-09-08? 请假天数是多少?4?
完美灬缺陷 2013-12-30
  • 打赏
  • 举报
回复
结果就是根据传入的月份,统计出每个员工当月的的请假天数
完美灬缺陷 2013-12-30
  • 打赏
  • 举报
回复
引用 6 楼 WWWWA 的回复:
userid=1:请假天数 为什么是1? 2013-08-20 -  2013-09-08?
请假天数是按月统计出来的结果, 1 那个结果我乱写的额。
WWWWA 2013-12-30
  • 打赏
  • 举报
回复
userid=1:请假天数 为什么是1? 2013-08-20 -  2013-09-08?
完美灬缺陷 2013-12-30
  • 打赏
  • 举报
回复
INSERT INTO `t_yg` VALUES (1,'员工1'); INSERT INTO `t_yg` VALUES (2,'员工2'); INSERT INTO `t_yg` VALUES (3,'员工3'); INSERT INTO `t_yg` VALUES (4,'员工4'); INSERT INTO `t_evection` VALUES(1,1,'2013-08-20 15:15','2013-08-20 08:30','2013-08-25 08:30',1); INSERT INTO `t_evection` VALUES(2,1,'2013-08-20 15:15','2013-08-20 08:30','2013-09-08 08:30',1); INSERT INTO `t_evection` VALUES(3,1,'2013-08-20 15:15','2013-08-20 08:30','2013-09-08 08:30',1); INSERT INTO `t_evection` VALUES(4,2,'2013-08-20 15:15','2013-08-08 08:30','2013-08-15 08:30',1); INSERT INTO `t_evection` VALUES(5,2,'2013-08-20 15:15','2013-08-24 08:30','2013-09-10 08:30',1); INSERT INTO `t_evection` VALUES(6,3,'2013-08-20 15:15','2013-08-20 08:30','2013-09-08 08:30',1); INSERT INTO `t_evection` VALUES(7,3,'2013-08-20 15:15','2013-08-20 08:30','2013-09-08 08:30',1); INSERT INTO `t_evection` VALUES(8,4,'2013-08-20 15:15','2013-08-20 08:30','2013-09-08 08:30',1); 例如8月份的统计记录 员工 月份 请假天数 1 13-08 1 2 13-08 2 3 13-08 3 4 13-08 4 5 13-08 5
WWWWA 2013-12-30
  • 打赏
  • 举报
回复
贴插入记录的SQL,及要求结果出来看看
完美灬缺陷 2013-12-30
  • 打赏
  • 举报
回复
引用 1 楼 WWWWA 的回复:
DATEDIFF不行? DATEDIFF(expr1,expr2) DATEDIFF() returns expr1 – expr2 expressed as a value in days from one date to the other. expr1 and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation. mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); -> 1 mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31'); -> -31
这样只是统计出两个日期之间的天数,肯定不对啊 请假天数, 一个是要去除周末的情况 一个是跨月的时候,只统计出当前月的天数。比如 11-20 到 12-10 只要统计出11月的请假天数。。

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧