人事考勤系统:多个时间段多笔可能重复打卡数据处理问题,期盼高人出现

andybear2360 2010-04-30 06:55:09
加精
请各位达人帮忙看下此问题,小弟初来乍到,不懂规矩的地方请各位达人海涵,问题详细如下:
公司有HR系统,需对其中的报表做一个改善,其中一段SQL语法不会:
有考勤刷卡记录表,表名为attendance ,有如下字段:
姓名 卡号 刷卡时间 刷卡类型 name id time type
张三 59775623 2010-04-01 07:23:37 null
张三 59775623 2010-04-01 07:50:21 null
张三 59775623 2010-04-01 18:20:22 null
张三 59775623 2010-04-01 18:50:53 null
李四 59775624 2010-04-01 07:00:06 null
李四 59775624 2010-04-01 18:00:12 null
李四 59775624 2010-04-02 08:20:32 null
李四 59775624 2010-04-02 17:00:22 null
李四 59775624 2010-04-01 18:00:08 null
.....................................................................................................
以下还有很多,每位员工每天都有,...............
现在需要更新刷卡的数据,需要对表attendance执行一个update动作,根据刷卡时间,需满足如下功能

1.如果刷卡时间是8:00以前,则type的值update之后就为“上班”;

2.如果刷卡时间是17:30以后,则type的值update之后就为“下班”;

3.如果刷卡时间为8:00~~12:00之间,则type的值update之后就为“迟到”;

4.如果刷卡时间为13:00~~17:30之间,则type的值update之后就为“早退”;

5.如果同一个人同一天在12:00以前有多次刷卡,则刷卡时间最早的那一笔记录其type值为“上班”,其余12:00以前的刷卡记录其type值update之后,变为“上班重复刷卡;

6. 如果同一个人同一天在13:00以后有多次刷卡,则刷卡时间最迟的那一笔记录其type值为“下班”,其余13:00以后的刷卡记录其type值update之后,变为“下班重复刷卡;

7.其余每天的任何时间段,update后,type值变为“乱刷卡”

小弟最头痛的是其中的5、6两种情况,可以使用where + group by + haviing count(*)>1将其查出来,update就不知道如何处理了,小弟思考了好几天,也只能做到这一步,实在做不下去了,跑来求助各位达人;

问题补充:
1.请各位达人务必注意那个时间的格式,SQL里面转换时间格式可以使用convert(char(10),time,120),输出为YYYYMMDD;convert(char(8),time,112),输出格式为YYYYMMDD;convert(char(10),time,108),输出为HH-MM-SS
...全文
7321 136 打赏 收藏 转发到动态 举报
写回复
用AI写文章
136 条回复
切换为时间正序
请发表友善的回复…
发表回复
翊骷 2013-01-12
  • 打赏
  • 举报
回复
求改成mysql的啊....自己到等了半天没弄出来
Sbangm 2010-11-23
  • 打赏
  • 举报
回复
刚好要做个这样的,学习学习……
incz84 2010-08-10
  • 打赏
  • 举报
回复
喜喜高人,感谢
number 2010-08-06
  • 打赏
  • 举报
回复
学习了~~ 目前不做ERP,怎么解决半年或者一年后数据表大的问题的呢?再做个局部表?
haieritboy 2010-05-17
  • 打赏
  • 举报
回复
mark,这个需要好好学习下
qiaoqinqie 2010-05-16
  • 打赏
  • 举报
回复
路过 得分
namesfx 2010-05-15
  • 打赏
  • 举报
回复
学习了
gentlebrother 2010-05-15
  • 打赏
  • 举报
回复
mark
conquer2009 2010-05-14
  • 打赏
  • 举报
回复
关注此贴,盼继续讨论
muyangpa 2010-05-14
  • 打赏
  • 举报
回复
学习了,高手如云的地方。
zhuoyue 2010-05-14
  • 打赏
  • 举报
回复
路过看看
o老猫钓鱼o 2010-05-14
  • 打赏
  • 举报
回复
牛的一b
jimzhao 2010-05-14
  • 打赏
  • 举报
回复
做了四年考勤模块,不说则已,说起来真是一把辛酸泪......
宝龙哥 2010-05-13
  • 打赏
  • 举报
回复
乱刷卡一般是以为当时没刷进去(刷成功了刷卡机应该有声音提示,这种错误的情况极少)刷过一次后又紧接着刷第二次,这种情况一般间隔都在数秒内,因此可以判断一下两次刷卡的时间间隔多少为乱刷卡,记为一次
宝龙哥 2010-05-13
  • 打赏
  • 举报
回复
设计思路明显的有问题,应该通过当天刷卡次数判断是上班还是下班,一般的不可能在公司过夜,这样的话奇数为进厂,偶数为出厂
wangwww110 2010-05-13
  • 打赏
  • 举报
回复
学习了 谢谢
zww_hh 2010-05-13
  • 打赏
  • 举报
回复
我以前做考勤软件的时候,软件是可以设置上下班打卡的时间范围~
qewei87 2010-05-13
  • 打赏
  • 举报
回复
学习中,支持~
艺仙 2010-05-13
  • 打赏
  • 举报
回复
不错,学习了
li_xingcheng 2010-05-13
  • 打赏
  • 举报
回复
路过!!!!
加载更多回复(110)

27,579

社区成员

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

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