188bet网站主页|管帐188bet.com|办理188bet.com|计算机188bet.com|医药学|经济学188bet.com|法学188bet.com|社会学188bet.com|文学188bet.com|教育188bet.com|理学188bet.com|工学188bet.com|艺术188bet.com|哲学188bet.com|文明188bet.com|外语188bet.com|188bet官方网址 188bet.com格局
我国论文网

用户注册

设为主页

您现在的方位: 我国188bet网站 >> 办理188bet.com >> 办理学基本理论188bet.com >> 正文 会员中心
 办理学基本理论188bet.com   本钱办理188bet.com   旅行办理188bet.com   行政办理188bet.com   人力资源办理188bet.com   市场营销188bet.com   秘书文秘188bet.com   档案办理188bet.com   其它办理学188bet.com
 物流办理188bet.com   投资决策188bet.com   战略竞赛办理188bet.com   企业办理188bet.com   工商办理188bet.com   公共办理188bet.com   财务办理188bet.com
完结考勤数据转化的SQL存储进程规划

 摘 要:在考勤系统中,考勤时机记载下或人一切刷卡时刻,而面临一条或多条考勤记载,咱们还需求一个比照判别的进程来确认哪些记载是有用的上下班考勤记载。本文依据我校考勤规矩规划了一个sql存储进程,能够扫除无效考勤记载,及时生成精确有用的上下班考勤记载,提供给用户网上查询。
  关键词:考勤;sql;存储进程
  学校要求教员干部上下班有必要刷卡考勤,规则晚于8:00刷卡为迟到,早于17:40刷卡为早退。现在,我校建有多个考勤机,24小时供教员干部刷卡考勤。但考勤机中只记载了或人刷卡时刻,至于哪些记载是有用的,该记载是上班仍是下班,没有完结智能判别。为便于学校网上及时查询,需求规划一段程序来智能判别有用上下班记载,并主动把一人多条考勤记载组成一人一条记载。
  1 考勤记载的判别剖析
  当天考勤记载的各种状况能够通过下表来显现:
  当某用户只要1条考勤记载时,考勤时刻最大值t_max=最小值t_min,上班考勤时刻tcome和下班考勤时刻tgo的值会有2种状况:①“考勤记载时刻<下班时刻”,则tcome=t_min,tgo为空;②“考勤记载时刻>=下班时刻”,则tcome为空,tgo=t_max。
  当某用户有2条以上考勤记载时,考勤时刻存在最大值t_max和最小值t_min,上班考勤时刻tcome和下班考勤时刻tgo的值会有3种状况:①“t_max<=上班时刻且t_min<=上班时刻”,tcome=t_min,tgo为空;②“t_max>上班时刻且t_min<下班时刻”,tcome=t_min,tgo=t_max;③“t_max>=下班时刻且t_min>=上班时刻”,tcome为空,tgo=t_max。www.seunghunhome.com
  通过上述剖析能够看出,用户当天不管是只要一条考勤记载仍是有多条记载,要判别出哪条记载是上班仍是下班,的确比较复杂。假如简略地用最大值和最小值别离替代上班考勤时刻和下班考勤时刻,是不能实在反映出考勤状况的。别的,在数据量比较大的状况下,用min和max函数进行计算,系统需求占用很多资源,查询功率比较低。所以,有必要规划一个考勤数据转化程序,把一人多条考勤记载转化成包括上下班时刻的一人一条记载,进步查询功率。
  2 程序规划
  2.1 考勤表数据结构
  创立sql考勤表jqr_inout,从各考勤机获取的考勤数据都汇总到此表中,字段有:
  2.2 规划思路
  通进程序处理,把有用最小值和最大值的数据标识出来,从而辨认出有用的上下班考勤时刻。表中字段done,表明处理状况,默认值为0。其间,0表明未处理的新建记载,2为最小值即上班时刻,3为最大值即下班时刻。
  首要鄙人班前的时刻中取出有用的最小值,即上班时刻。
  update jqr_inout set done=2 where done=0 and hm<'1740' and checktime=(select min(ja.checktime) from jqr_inout ja where ja.ssn=jqr_inout.ssn and ja.ymd= jqr_inout.ymd)
  接着从上班后的时刻中取出有用的最大值,即下班时刻。
  update jqr_inout set done=3 where done=0 and hm>'0800' and checktime=(select max(ja.checktime) from jqr_inout ja where ja.ssn=jqr_inout.ssn and ja.ymd=jqr_inout.ymd)
  这样处理后,标识为2的是上班时刻,标识为3的是下班时刻。
  2.3 程序改善
  上述代码尽管能够标识出上下班时刻,可是是一次性的,运转进程中还有一些状况需求进行处置。
  一是考勤数据是实时收集的,数据会不断地添加进来,需求把已处理过的记载和待处理的记载以及处理中的记载区别开来。咱们能够有字段done来表明,1-3表明正在处理的记载(1为未确认状况,2为最小值,3为最大值),4-9表明现已处理过的记载(4为最小值,5为最大值,9为无效值)。
  二是跟着考勤数据的添加,最小值和最大值也会发生改变,本来计算的最小值或最大值有或许不精确,需求对已处理过的最小值和最大值进行有用性判别。
  三是程序在履行中有或许会意外中止,需求从头计算。
  改善后的程序代码如下:
  第1步,将一切新增记载标识为待处理状况,即把done由0变为1。为避免程序没有履行完意外中止,确保数据计算的正确性,此步能够一起将done由2或3变为1。此步履行后,done的值或许有1、4、5、9。
  /*step1*/update jqr_inout set done = 1 where done in (0,2,3)
  第2步,在done的值

1的数据中,取下班前的最小值标识为2,即把done由1变为2。此步履行后,done的值或许有1、2、4、5、9。
  /*step2*/update jqr_inout set done=2 where done=1 and hm<'1740' and checktime=(select min(ja.checktime) from jqr_inout ja where ja.done not in (0,9) and ja.ssn=jqr_inout.ssn and ja.ymd=jqr_inout.ymd)
  第3步,在done的值为1的数据中,取上班后的最大值标识为3,即把done由1变为3。此步履行后,done的值或许有1、2、3、4、5、9。  /*step3 */update jqr_inout set done=3 where done=1 and hm>'0800' and checktime=(select max(ja.checktime) from jqr_inout ja where ja.done not in (0,9) and ja.ssn=jqr_inout.ssn and ja.ymd=jqr_inout.ymd)
  第4步,把done的值为1的数据标识为无效,即把done由1变为9。
  /*step4*/update jqr_inout set done=9 where done =1
  此步履行后,done的值或许有2、3、4、5、9。某天某用户的考勤数据组合状况如下表。其间有7种状况需求标识出无效值,在第5步和第6步平分2步完结。
  第5步,将234、235、2345中的4或5标识为9,将35、345中的5设为9,将245中的4设为9。
  /*step5*/update jqr_inout set done=9
  where done in (4,5) and (select count(*) from jqr_inout ja where ja.done in (2,3)
  and ja.ssn=jqr_inout.ssn and ja.ymd=jqr_inout.ymd)=2
  or done=5 and (select count(*) from jqr_inout jc where jc.done in (3,5)
  and jc.ssn=jqr_inout.ssn and jc.ymd=jqr_inout.ymd) =2
  or done=4 and (select count(*) from jqr_inout jb where jb.done in (2,4,5)
  and jb.ssn=jqr_inout.ssn and jb.ymd=jqr_inout.ymd) =3
  第6步,将24中的4,当时刻在上班后时标识为3,否则为9。
  /*step6*/update jqr_inout set done =(case when hm>’0800’ then 3 else 9 end)
  where done=4 and (select count(*) from jqr_inout ja where ja.done in (2,4)
  and ja.ssn=jqr_inout.ssn and ja.ymd=jqr_inout.ymd) = 2
  第7步,上述2步履行后,done的值为2、3、4、5的都是有用值了。此刻的2或4是最小值可作为上班时刻,3或5是最大值可作为下班时刻。取有改变的考勤记载,把一人多条考勤记载能够转化成了一人一条记载。可依据需求将相关数据导入其他特定表中供用户查询,这儿只列出其间的select句子。
  /*step7*/select distinct j.ymd as 年月日,j.ssn as 卡号,j.name as 名字,
  (select ja.checktime from jqr_inout ja where ja.ssn=j.ssn and ja.ymd=j.ymd
  and ja.done in (2,4)) as tcome as 上班刷卡时刻,
  (select jb.checktime from jqr_inout jb where jb.ssn=j.ssn and jb.ymd=j.ymd
  and jb.done in (3,5)) as tgo as 下班刷卡时刻
  from jqr_inout j where exists (select 1 from jqr_inout jc where jc.ssn=j.ssn
  and jc.ymd=j.ymd and jc.done in (2,3)) order by j.ssn,m.wid
  第8步,将2改为4,3改为5。完结数据转化处理进程。
  /*step8*/update jqr_inout set done=(case when done=2 then 4 else 5 end)
  where done in (2,3)
  3 结束语
  本文规划的sql存储进程,通过在考勤记载表中添加一个表明处理状况的字段done,然后通过一系列的数据比照处理,终究把有用的最小值和最大值标识出来,从而辨认出有用的上下班考勤时刻。在我校考勤系统中,咱们把该存储进程放在相关程序中定时运转,完结了教员干部在网上及时精确地查询考勤信息的功用,取得了比较好的作用。
  [参考文献]
  [1]严苏丹.根据学校局域网的学生智能考勤系统研讨与开发.科技信息,2012,6.
  [2]邵东轶.根据web的考勤办理系统的规划与开发.计算机光盘软件与使用,2012,15.
  [3]周勣.根据网络的考勤系统开发及使用.我国卫生资源,2012,1.
  [4]万瑶,姚娟,赵文强.主动考勤系统的规划与完结,山西电子技术,2011,5.

  • 上一个办理188bet.com:
  • 下一个办理188bet.com:
  •  更新时刻:2013-11-09 16:30:42  作者:佚名 [标签: 完结 数据 转化 存储进程 ]
    姓 名: *
    E-mail:
    评 分: 1分 2分 3分 4分 5分
    谈论内容:
    宣布谈论请恪守我国各项有关法律法规,谈论内容只代表网友个人观点,与本网站态度无关。
    一种完结M序列码的电路规划
    对完结高产农作物的栽培技术剖析
    汽车产业跨企业协同信息办理竞赛力的完结方
    怎么真实完结小学语文有用课堂教学
    浅议使用危险办理理论完结本钱办理
    怎么让高校图书馆完结网络化浅探
    我国融资融券完结途径:横向比较及前瞻
    进步供应链运营水平,完结供应链战略与竞赛
    简论独立学院法学专业人才培养目标及其完结
    简论独立学院法学专业人才培养目标及其完结
    树立科学的办理模式完结卫生监督行政的人道
    讨论中学办理计划中怎么完结以人为本
    | 设为主页 | 加入收藏 | 联络咱们 | 网站地图 | 手机版 | 188bet.com宣布

    Copyright 2006-2013 © 结业188bet网站 All rights reserved 

     [我国免费188bet网站]  版权一切