表manualsign,里面有
SignId 签卡Id
UserId 用户id
SignTime 签卡时间
SignDesc 签卡备注
SignTag 签卡标记
现在我要根据输入的时间段在界面上显示出勤率,迟到次数,早退次数,矿工次数
要求出勤率精确到百分数两位小数,开始时间和结束时间之内只要是非周六和周日都算工作日。
工作时间以上午8:30和下午5:30为准。这要怎么查呢?要写几个方法吗?
SignId 签卡Id
UserId 用户id
SignTime 签卡时间
SignDesc 签卡备注
SignTag 签卡标记
现在我要根据输入的时间段在界面上显示出勤率,迟到次数,早退次数,矿工次数
要求出勤率精确到百分数两位小数,开始时间和结束时间之内只要是非周六和周日都算工作日。
工作时间以上午8:30和下午5:30为准。这要怎么查呢?要写几个方法吗?
解决方案 »
- hibernate复合键
- org.apache.jasper.JasperException
- 高人现身吧!javax.servlet.jsp.tagext.*
- 关于整型转换问题
- 有什么办法在点击超链接时就提交表单数据呢?
- java程序员对javascript的掌握程度到底该多少?
- jsp 如何把时间用时间戳的形式存入数据库中!
- jsp中如何使用weblogic配置的连接池?
- 怎么才能让javax.swing.*包里的类能在JApplet小应用程序里在IE里能直接运行??急!
- 用applet画线,IE一动(或最小化后恢复)线就没了或改变颜色了,用......
- 散分啊!大家说下客户们奇怪的需求!
- jsp如何响应服务器进行更新?
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次卡, 记录几次??
where weekday(SignTime) in(0, 1, 2, 3, 4)你具体查查, 我不知道weekday返回的具体几代表星期几..
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