美文网首页
基于时序下的进出记录匹配和数据去重

基于时序下的进出记录匹配和数据去重

作者: 济夏 | 来源:发表于2019-08-08 18:23 被阅读0次

    时序下进出记录匹配说明

    需求说明

    一个人至少管理1个工地;每天至少要去一个自己管理的工地;该人员没有固定上下班时间;统计一个人的月度工地出勤绩效情况。   

    绩效考核标准:

           (1)每天工地工作时长不小于m小时,则达标;

           (2)每个月所有工地工作时长总和不小于n天,则达标;

           (3)每月该人管理的所有工地都有出勤记录的才达标,有工地未出勤的绩效不达标;

           (4)只有满足上述条件的绩效才达标;否则,不达标。

    其中,夜班加班的分割处理,分割部分计入当天统计。

    现只能通过提供的进出记录,判断月度出勤绩效情况。

    问题描述

    硬件上报读卡进出记录的问题说明:

           c-1.进或者出记录的时间时长问题:若人员经电感线圈激活卡片,但在该激活区域停留了一段时间,这种情况下的时间是哪一个?

           c-2.硬件设备如何保证按照时间顺序进出记录完整匹配的情况?

           c-3.假如无法保证时序下数据的完整性,是否可以降低不完整的情况,少量数据异常标识处理?

               时序下的进出记录队列可能情况很多,这里罗列部分:

                  偶数队列长度情况,

                  (1)进出进出进出

                  (2)出进出进出进

                  (3)出出进出进进

                  (4)进进出出进出

                  奇数队列长度情况,

                  (1)进出进出进出进

                  (2)出进出进出进出

                  (3)出出进进出进进

                  (4)进进出出进出出

      这样的组合太多,不再一一罗列,如果上述无法保证时序下数据完整匹配的情况,则考核的报表无法保证真实可靠性。

    问题分析

    要解决上述需求,必须要匹配下列要素。

    (1)    月度时序;

    (2)    日期匹配;

    (3)    项目地人员、日期匹配;

    (4)    项目地进出记录匹配;

    月度时序问题

    假如,某人某天未去他管理的项目地,则无进出记录,在sql 后,查询不到该天日期,会造成该月日期中断。

    怎么解决因查询无进出记录造成的月日期时序中断的情况?

    a.   存储过程调用

    这里不再赘述。

    b.   sql变量控制

    指定数据条数,生成连续的数字或日期。

    涉及到的知识点是变量,DATE_SUB(),DATE_FORMAT().使用以上方法的好处就是不用创建存储过程,也不涉及到任何表。缺点就是数据的条数控制并不灵活,不能和用户之间形成互动,即不能自定义日期区间,只能控制数据条数。

    c.  利用现有含日期时间的表

    要求是这个表中的数据足够庞大,好处是不涉及存储过程,不涉及变量,且能自定义日期区间。

    综合考虑,使用存储过程调用。

    mysql 存储过程调用

    可以理解为建立标准日期时间表。

    step1.创建存储过程

    CREATE PROCEDURE createDate()

    BEGIN

           DECLAREindexdate DATE;

           setindexdate = DATE('2019-01-01');

    WHILE indexdate<=DATE('2020-01-01')

      DO

                         INSERTinto  ts_date(date) VALUES(indexdate);

                         setindexdate = ADDDATE(indexdate,1);

    end WHILE;

    END;

    Step2.存储过程调用

    CALL createDate();

    日期匹配问题

    这里可以这么处理

    (1)   根据月度时序中的表来补全日期,

    (2)   再根据日期来查询进出记录,

    (3)   根据卡号过滤人员,

    (4)   根据记录中的处理机设备编号来区分项目地。

    这里就不存在问题了。

    项目地匹配问题

    设备和项目地绑定,这里可以这样处理

    (1)    根据处理机设备来区分项目地

    (2)    根据记录中上报的卡号识别人员信息

    这里也不存在问题。

    项目地进出记录匹配问题

    上报数据中有时间、人员卡号、处理机编号、进出状态标识,满足匹配条件。

    但是,因为意外造成的进出记录不匹配,会对报表统计造成致命错误。

    因此这里重点说明下因为异常造成的数据匹配问题。

    匹配模式

    正常的匹配模式有下列几种:

    1.    ABAB

    2.    BABA

    3.    ABABA

    4.    BABAB

    5.    A

    6.    B

    其它的均为异常情况;

    基于此,提供基本匹配算法。

    基本思路:

    (1)   匹配要素为A(进)B(出)

    (2)   根据需要匹配的数据长度构造上述6种匹配模式下的正确匹配数据组

    (3)   筛选符合条件的数据,重组新的数据组并标识不匹配的数据到源数据组

    构造匹配数据组方法如下:

    构造匹配数据

    构建满足匹配模式的数据并标识原始数据匹配情况的方法如下:

    数据匹配及源数据标识

    上述完成后,只需要解决数据的重发问题即可。

    (1)    数据重发问题,需要根据实际设备验证。

    (2)    跨多天工作的情况:实际情况下会很少发生,上述计算时长均分割到当天和前天,这样理论上会造成实际时长缺失。建议配合提供管理制度解决。

    最终标记

    数据去重

    因为是根据时间去重的,记录有进出之分,且进出需要考核时长,因此需要根据客户要求灵活控制去重时间和保留进出记录的哪一种。

    去重 验证 true false

    相关文章

      网友评论

          本文标题:基于时序下的进出记录匹配和数据去重

          本文链接:https://www.haomeiwen.com/subject/ookfjctx.html