weixin_42853935
weixin_42853935
采纳率100%
2019-05-10 14:17 阅读 837

sql 组语句 关于考勤的计算

1000

1.需求是想计算如下表数据,计算出每个人的有效工时,用到的字段列为:

姓名(name)、 打卡日期(attendancedate)、 打卡时间(attendancetime)、 打卡位置(attendancearea)
图片说明

2.关键点在于例如有中间出去吃饭的张三,他一天打了四次卡,06时、12时 、13时、17时,怎样做到在数据库计算中,得出有效出工时间,默认上班是没有规定时间的,只是中间出去可能吃午饭会再次刷一次出门卡和一次进门卡,怎么扣除出去的时间,计算得出有效的在公司内的有效工时,例如张三出去吃饭一小时,那这一天的有效工时是不会包含中午吃饭的一小时的,还有一种可能就是中间多刷了一次下班卡,或者多刷了一次上班卡,或者N次,但是没有一个进一个出对应起来的都算异常,怎样将这个标记为异常不计算标记查询出来的数据为 异常数据。请高手指教一下。感激不尽

3.图中例子只是参考,会有很多人很多打卡数据的,也会有很多天的,希望可以支持区间多日查询有total有效工时的计算,请给出sql语句,拼出显示数据的t-sql,可以执行并看见效果。可以用临时表计算存储过程,种类不限,可用就行,急急急
效果如图,拼当日计算语句就行了,报表这个按月列出每日的我自己做
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    rubikchen 502203305 2019-05-10 15:07
    select a.ID,a.attendancedate,max(b.t)-min(b.t) work 
    from (select ID,attendancedate from test group by ID,attendancedate) a left join (select ID,attendancedate,max(attendancetime)+min(attendancetime) as t from test group by ID,attendancearea) as b 
    on a.ID = b.ID and a.attendancedate=b.attendancedate 
    group by ID,attendancedate;
    
    点赞 1 评论 复制链接分享
  • dabocaiqq dabocaiqq 2019-05-10 15:01

    图片说明

    在回答你的问题以前,先问你一个问题:回答你的问题,你立刻采纳自己回收积分怎么办?

    点赞 3 评论 复制链接分享
  • lllomh lllomh 2019-05-10 14:58

    你好,计算不应该 在sql 来计算。sql 语句只是负责增删改查 而已。其他的操作得到程序中完成、

    点赞 1 评论 复制链接分享
  • luojianjun2 Flying_with_you 2019-05-14 10:51

    图片说明图片说明图片说明
    没啥事自己练练写的,希望对你有帮助!

    点赞 评论 复制链接分享

相关推荐