一个查询问题

pei_zhenxi 2009-09-14 07:08:23
表manualsign,里面有
SignId 签卡Id
UserId 用户id
SignTime 签卡时间
SignDesc 签卡备注
SignTag 签卡标记

现在我要根据输入的时间段在界面上显示出勤率,迟到次数,早退次数,矿工次数
要求出勤率精确到百分数两位小数,开始时间和结束时间之内只要是非周六和周日都算工作日。
工作时间以上午8:30和下午5:30为准。


这要怎么查呢?要写几个方法吗?
...全文
108 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyandlh 2009-09-15
  • 打赏
  • 举报
回复
学习了~
qustgjk 2009-09-15
  • 打赏
  • 举报
回复
路过!帮顶!
wenbinglove 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lgg201 的回复:]
引用 3 楼 pei_zhengxi 的回复:
谢谢哦,星期六星期天不计算在内,楼上的并没有排除星期六和星期天呀


where weekday(SignTime) in(0, 1, 2, 3, 4)

你具体查查, 我不知道weekday返回的具体几代表星期几..
[/Quote]
支持一下
淡定的峰哥 2009-09-15
  • 打赏
  • 举报
回复
上面条件的逗号改成and
淡定的峰哥 2009-09-15
  • 打赏
  • 举报
回复
1.某个时间段有多少工作日通过程序算出来
2.sql语句

--假如该段有22个工作ri
select a.userid,a.checkrate,b.late,c.leave,d.absent from
(select userid,count(*)/22 checkdate from manualsign group by userid)a,
(select userid,count(*) late from manualsign where 签到时间<8:30 group by userid )b,
(select userid,count(*) leave from manualsign where 签退时间>8:30 group by userid )c,
(select userid,22-count(*) absentfrom manualsign group by userid )d,
where a.userid=b.userid,b.userid=c.userid,c.userid=d.userid,d.userid=a.userid


goosman 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pei_zhengxi 的回复:]
谢谢哦,星期六星期天不计算在内,楼上的并没有排除星期六和星期天呀
[/Quote]

where weekday(SignTime) in(0, 1, 2, 3, 4)

你具体查查, 我不知道weekday返回的具体几代表星期几..
pei_zhenxi 2009-09-14
  • 打赏
  • 举报
回复
谢谢哦,星期六星期天不计算在内,楼上的并没有排除星期六和星期天呀
goosman 2009-09-14
  • 打赏
  • 举报
回复
出勤率: 无论早退或迟到, 都是出勤.
1. 获取出勤天数: SELECT count(*) from manualsign where signtime between a and b
2. 程序中根据时间段计算工作日.
迟到次数:
1. 查询得到签卡是本天的第多少分钟(如果要精确到秒继续计算), SELECT HOUR(SignTime) * 60 + MINUTE(SignTime) AS minutes FROM manualsign.
2. 把你的8.30和5.30的相对值在程序中计算出来, 比较就可以了
早退次数: 和迟到的思想一样.
矿工次数: 出勤率的第一步. 反演一下...

上面草草的做了一下, 但是, 如果加入周末打卡, 可能就会比较复杂了....
另外, 员工一天打N次卡, 记录几次??
config_man 2009-09-14
  • 打赏
  • 举报
回复
。。。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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