高分求sql考勤数据分析问题

antsing_2008 2010-05-24 09:16:50
早上好,还是继续考勤问题,没做过真麻烦。
一,表:
1,刷卡记录表(考虑重复刷卡,上班取最后的,下班取最小的记录)
员工ID 刷卡时间
1 2010-05-24 07:56
1 2010-05-24 08:00
1 2010-05-24 12:00
1 2010-05-24 13:31
...
2 2010-05-24 07:56
2 2010-05-24 12:00
...
2,班次设置表(总共可设置4个班段,其中班段1为必输,必须考虑跨天)
班次代号 班段1上班时间 班段1刷卡提前分钟 班段1考勤提前分钟(可能早会时间) 班段1刷卡延迟分钟
班段1下班时间 班段1考勤延迟分钟 班段1刷卡提前分钟 班段1刷卡延迟分钟 班段2 ...
A01 08:00 10 30 5 12:00 0 0 30
...
3,排班表
员工ID 班次代号 日期 休假类型
...
1 A01 2010-05-24
1 A01 2010-05-25
...
2 A01 2010-05-24
...

二,问题如下:考勤分析正常,迟到,早退什么的;
结果可能如下:
员工ID 班次 排班日期 班段1实际上班时间 班段1上班分析 班段1下班分析 班段2上班分析...
1 A01 2010-05-24 08:00 正常 正常 ...
1 A01 2010-05-25 ...
...
三,有做过考勤的应该很简单,提供思路也可以,先谢谢了
...全文
452 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsp3ng 2010-06-29
  • 打赏
  • 举报
回复
考勤有一点非常重要, 考勤的工时表达方式一定细, 需要表达出任意时刻点的情况, 想怎么统计都行的.

例如一个员一天的考勤结果, 需要用N条记录来表达,而不是一条记录来表达
08:00 – 08:01 迟到
08:01 – 10:00 出勤
10:00 – 11:30 事假
11:55 – 12:00 早退
13:00 – 13:02 迟到
13:10 – 13:30 病假
13:30 – 15:30 出差
15:30 – 17:30 缺勤
18:00 – 01:00 加班
23:00 - 01:00 夜班
tsp3ng 2010-06-29
  • 打赏
  • 举报
回复
考勤问题千言万语估计都说不清楚,每个企业都不一样.

要解决这个问题,必须要从每个时间点,每个考勤对象去分析. 仅仅考虑迟到的情况.都有N个规则.

例如 考勤系统中某员工A(技术部的工程师, 属于月薪人员)在2008-8-8日08:05 才来上班,本来上班时间08:00, 那么这个员工算不算迟到

第1步检查是否对该员工2008-8-8这一天作了特殊规则,如果这一天奥运会开幕,可以不计算迟到,那么该员工不算迟到,如果没有特殊规定

第2步检查是否对该员工有特别的规定,例如不计迟到,或者允许迟到10分钟,那么该员工就应该不算迟到, 如果没有特殊规定

第3步检查技术部的工程师是否有特殊规定,例如不计迟到,或者允许迟到10分钟,那么该员工就应该不算迟到, 如果没有特殊规定

第4步检查技术部的月薪是否有特殊规定,例如不计迟到,或者允许迟到10分钟,那么该员工就应该不算迟到, 如果没有特殊规定

第5步检查工程师是否有职位规定,例如不计迟到,或者允许迟到10分钟,那么该员工就应该不算迟到, 如果没有特殊规定

第6步检查技术部是否存在部门规定, 如果没有... 直到找到规定,

第7步检查月薪人员是否存在规定,例如不计迟到,或者允许迟到10分钟,那么该员工就应该不算迟到, 如果没有特殊规定

第8步按整个公司的制度执行, 如果整个公司允许迟到5分钟,则不算迟到,否则按迟到处理。

如果要做一个通用的考勤系统, 估计处理一个员工一天的考勤存储过程都要写上万行.
xyj052 2010-06-29
  • 打赏
  • 举报
回复
我们公司的考勤也很麻烦,后来是自己写了存储过程,使用了原先考勤系统的排班功能,基本解决了问题。
方法如下:
1。使用四个打卡机,两个打上班卡,两个个打下班卡,用于区分上班记录和下班记录
2。不同人的上班时间根据员工的排班时间来,用于区分不同的人的上班时间
3。因出差等无法打卡的,由部门提前出具考勤补充!
不过我们这个也只是基本解决了常白班的问题,像两班倒的人员因为上班时间不固定就没办法,不过这些人员都是计件制的,影响不大,基本就这样,希望对你有帮助!!
claro 2010-06-29
  • 打赏
  • 举报
回复
.......


帮顶
永生天地 2010-06-03
  • 打赏
  • 举报
回复
这个还有个没搞定的考勤
antsing_2008 2010-05-25
  • 打赏
  • 举报
回复
其实我现在就是不知道怎样处理下面的数据,简单点吧,表自己建下,这台上网机没有sql
1,刷卡记录表(考虑重复刷卡,上班取最后的,下班取最小的记录)
员工ID 刷卡时间
1 2010-05-24 07:56
1 2010-05-24 08:00
1 2010-05-24 11:58
1 2010-05-24 13:31
2,班次设置表(总共可设置4个班段,必须考虑跨天,带红色字体字段是4个班段分别都有)
上班时间 刷卡提前 考勤提前 刷卡延迟 下班时间 考勤延迟 刷卡提前 刷卡延迟
08:00 10 30 5 12:00 0 0 30
班次表用法:
1,班段提前刷卡:这边没什么用
2,班段提前考勤:比如8点上班,提前10分钟考勤,那么就是7点50分钟之后属于不正常
3,班段延迟刷卡:比如8点上班,延迟5分钟刷卡,那么就是8点5分钟之前的属于正常,8点5分钟之后,属于不正常

我想得到的结果如下:

员工ID 班段1实际上班时间 班段1上班分析 班段1下班分析 班段2上班分析...
1 08:00 正常 不正常



duanzhi1984 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 antsing_2008 的回复:]
公司的旧系统的考勤是循环每天进行判断,每人循环一次,每天也嵌套循环一次,我感觉这样会很慢
[/Quote]

我们也在写一个.以前在外面买的分析时经常出问题。。。
antsing_2008 2010-05-25
  • 打赏
  • 举报
回复
公司的旧系统的考勤是循环每天进行判断,每人循环一次,每天也嵌套循环一次,我感觉这样会很慢
antsing_2008 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xys_777 的回复:]

你把你的三个表的格式在列一下,要注意数据和列名对好
[/Quote]

不好意思,由于公司电脑不能连外网而且向外部发邮件,所以不能很完整的把表格式列出,我是根据需要的列打出来的

一,表:
1,刷卡记录表(考虑重复刷卡,上班取最后的,下班取最小的记录)
员工ID 刷卡时间
1 2010-05-24 07:56
1 2010-05-24 08:00
1 2010-05-24 12:00
1 2010-05-24 13:31
2 2010-05-24 07:56
2 2010-05-24 12:00

2,班次设置表(总共可设置4个班段,必须考虑跨天,带红色字体字段是4个班段分别都有)
班次代号 上班时间 刷卡提前 考勤提前 刷卡延迟 下班时间 考勤延迟 刷卡提前 刷卡延迟
A01 08:00 10 30 5 12:00 0 0 30
...
3,排班表
员工ID 班次代号 日期 休假类型
1 A01 2010-05-24
1 A01 2010-05-25
2 A01 2010-05-24
antsing_2008 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xys_777 的回复:]
看了一下问题,好像非常麻烦,而且还有很多不是很清楚。
班段里延迟,提前怎么用
[/Quote]
1,班段提前刷卡:这边没什么用
2,班段提前考勤:比如8点上班,提前10分钟考勤,那么就是7点50分钟之后属于不正常
3,班段延迟刷卡:比如8点上班,延迟5分钟刷卡,那么就是8点5分钟之前的属于正常,8点5分钟之后,属于不正常,有相关参数设置:比如超过5分钟-10分钟属于早退,超过10分钟怎么处理,这样的
antsing_2008 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 antsing_2008 的回复:]
看了,没什么合适的,呵呵
[/Quote]
1,班段提前刷卡:这边没什么用
2,班段提前考勤:比如8点上班,提前10分钟考勤,那么就是7点50分钟之后属于不正常
3,班段延迟刷卡:比如8点上班,延迟5分钟刷卡,那么就是8点5分钟之前的属于正常,8点5分钟之后,属于不正常,有相关参数设置:比如超过5分钟-10分钟属于早退,超过10分钟怎么处理,这样的
Q315054403 2010-05-24
  • 打赏
  • 举报
回复
即使提供思路,都不是三二十分钟能沟通好的。。。结构设计要到位,非SQL之力
永生天地 2010-05-24
  • 打赏
  • 举报
回复
看了一下问题,好像非常麻烦,而且还有很多不是很清楚。
班段里延迟,提前怎么用
antsing_2008 2010-05-24
  • 打赏
  • 举报
回复
看了,没什么合适的,呵呵
duanzhi1984 2010-05-24
  • 打赏
  • 举报
回复
首先你 是想用SQL过程进行分析吗?若用SQL分析则较麻烦,且速度较慢!

你可以在前端写。


思路方面:无非是对一个时间点的分析。你的思路也挺清晰的。
在前端写程序,把班次,人员班次,打卡数据一次加载到前端,一个一个分析即可。。



1,班段提前刷卡:这边没什么用
2,班段提前考勤:比如8点上班,提前10分钟考勤,那么就是7点50分钟之后属于不正常
3,班段延迟刷卡:比如8点上班,延迟5分钟刷卡,那么就是8点5分钟之前的属于正常,8点5分钟之后,属于不正常,有相关参数设置:比如超过5分钟-10分钟属于早退,超过10分钟怎么处理
永生天地 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 antsing_2008 的回复:]
恳请各位帮忙下,抽点时间解决下
[/Quote]

你把你的三个表的格式在列一下,要注意数据和列名对好
永生天地 2010-05-24
  • 打赏
  • 举报
回复
考勤的真是很麻烦。。。
永生天地 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]
这里有相关考勤话题的贴子,参考: 考勤贴
[/Quote]
同意,参考以前类似这种考勤的
htl258_Tony 2010-05-24
  • 打赏
  • 举报
回复
这里有相关考勤话题的贴子,参考: 考勤贴
antsing_2008 2010-05-24
  • 打赏
  • 举报
回复
恳请各位帮忙下,抽点时间解决下

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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