开发者社区> 问答> 正文

用什么方法可以高效地查出某一时间范围内员工的有效刷卡记录?

最近,遇到并解决一个SQL上的疑难问题。考勤系统,记录着员工进出公司的刷卡记录。而员工刷卡并不规范,存在刷多次的情况。例如:出去时连续刷多次,进来时也连续刷多次。筛选有效刷卡记录数据的规则:对于出去时连续刷多次(包含一次)的情况,取第一次刷卡记录;对于进来时连续刷多次(包含一次)的情况,取最后一次的刷卡记录。考勤系统的数据量很大,假设公司有2万名员工,一员工一天100条刷卡记录。

  用什么方法可以高效地查出某一时间范围内员工的有效刷卡记录?

展开
收起
苍霞学子 2021-10-12 16:24:05 1939 0
2 条回答
写回答
取消 提交回答
  • 可以按以下步骤进行解决: 1、首先使用row_number() over partition by根据员工编号、日期进行分组排序; 2、其次再使用row_number() over partition by根据员工编号、日期、刷入刷出标识进行分组排序,筛选出出入标识数据结果; 3、根据第1、2步算出两者的逆差,判断出入数据的连续性; 4、合并1、2、3步SQL即可。

    2021-10-12 19:01:05
    赞同 展开评论 打赏
  • 通过group by分组,然后count计数

    2021-10-12 16:30:19
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载