这些SQL语句该怎么写?(150分)

  • 主题发起人 主题发起人 墨剑
  • 开始时间 开始时间

墨剑

Unregistered / Unconfirmed
GUEST, unregistred user!
现在我正准备做一个考勤系统,由于以前没做过类似的东东,现在连一点头绪都没有.
要做的功能其实很简单,表只有一个 KQ ,字段也只有两个:card_no(卡号),dt(打卡时间).
上下班时间为周一至周五的上午8:30-12:00,下午2:30-6:00
现在我要统计的是
1,某个月有那些人迟到
2,统计某个月的出勤率
3,统计个人迟到率
4,统计满勤率

这些我算法我都没有一点头绪
请问那位大虾能给小弟我些许提示,或是一点建议
(分是少了点只有150,但现在我就只有这点家当.可是我每天加的分我都可以送给你呀,天天都写 某某大虾,进来拿分)
 
用存贮过程了,
哈哈,这个东西可不怎么好玩,有时考勤规则复杂的话,
哪可要写好多代码了.
我曾经写过一千多行的存贮过程了.
 
如果kq是桌面形数据库就用过滤,
否则用sql实现,你如果从未做过数据库应用程序的话可能有点难。
一天只有两次打卡的情况,你的dt 的时间格式不知道是什么样的。
1、select card_no from kq where (dt<上班时间) and (dt like 某月)
2、select cad_no form kq where dt like 某月 然后除以应该出勤数得出出勤率;
剩下自己应该可以写出来了。
 
明确两个参数:满勤天数、上班时间
这样你就可以统计出你想要的结果了。maming的方式不太好,不要用 "dt like 某月"
的写法,而是将dt的值转换为年月有,与你要统计的日期相吻合。

另外,你现在的作法和实际的应用系统的要求好象还有一些距离。
一个实用的考勤系统,除了记录上班时间,还有下班时间,再进一步,还可以查询一个员工
在某一个时段内是否位于公司等状况。
 
只要能将满足条件的记录选出来其它的可以根据公司的规定进行计算,下面例子将某个月
有那些人迟到选出来,其它的记录可参考:
select card_no from kq
where (month(dt)=所求月份是整数类型) and //用来规定求哪一月
(DATEPART(dw,dt) between 2 and 6) and //确定是在周一至五
(not (((DATEPART(hh,dt)+(DATEPART(mi,dt)/60.0) between 8.5 and 12.0) and
((DATEPART(hh,dt)+(DATEPART(mi,dt)/60.0) between 14.5 and 18.0)))
//确定不是在上班规定的时间内
以上使用的是mssql中的函数,具体可看它的帮助,如果使用其它系统必须根据系统中的
函数修改,
 
我做的怎么用了5000行呢?
 
to maming:
问题是每天要打两次上班卡,两次下班卡
还有就是如果重复打卡怎么办?

to windbell
有重复打卡也不通
 
not (((DATEPART(hh,dt)+(DATEPART(mi,dt)/60.0) between 8.5 and 12.0) and
((DATEPART(hh,dt)+(DATEPART(mi,dt)/60.0) between 14.5 and 18.0))
//确定不是在上班规定的时间内
这里不能用not。我是这样想的:只要某人在上班时间打卡,那这人肯定是没有按时上班,
另外在说了,好好的上班时间打什么卡,如果这些和经济挂勾的话,谁会没事上班后再打卡,
所以不会出现重复情况,实在怕重复的话,就用select [red]distinct[/red] card_no
 
select distinct card_no 是不行的,因为每天一个人至少要打四次卡(有时怕没有成功又再打
一次),而且我又是按照一段日期统计,所以不行
 
我终于明白了,考勤系统本身就是一个很复杂的查询与运算的操作,不是简单的几个SQL语句就可以搞定的
事情,所以我决定谁能给我一些编程的思路,我就送分.
算是一个程序设计流程之类的东西吧.
 
有谁给我提供一本怎样编写考勤系统的书籍?
 
你这个考勤系统太简单了,
没见过又有2班倒,3班倒,4班倒混合在一起的
还有每个星期每个人班次类型不一样的
 
你有没有去公司实际考查一下,不要盲目的编程序。
 
我见过倒班的,搞的人要死
在程序中让用户指定一个打卡合法时间段
如7:00~8:00 11:30~12:00 14:30~15:00
再用SQL查吧,查死人了的
 
把业务规则了解清楚,我没有做出考勤的,学习一下。
只要把问题最小化后再进行编码,应该没有什么问题。
 
那能不能告诉我在ACCESS中的分支判断怎么写?,就如if ... else 之类的
 
^_^,我以前做了一个这种程序,我的文档中保留了当初的设计,给你吧,我喜欢被人都会我会的东西。记住收你的邮箱
 
给我一份,谢谢!
wangyuqing@cjec.com.cn
 
给我一份,谢谢!
lzdwww111@163.com
 
后退
顶部