一个sql语句的问题

[复制链接]
查看11 | 回复5 | 2010-9-3 12:11:38 | 显示全部楼层 |阅读模式
id,编号signTime,签到时间signDate,签到日期 signNum,签到次序 username,签到人 signState,签到状态
一天总共签四次,上午签到,上午签退,下午签到,下午签退。签到次序则是表示某天内的第几次签字。出勤情况按半天来计算。上午签到签退算半天,下午签到签退算半天。如果(上午/下午)没签到,则(上午/下午)不能签退。如果只签到不签退按旷工算。比如:上午签到了没签退,下午签到了也签退了。按旷工半天算。状态分为迟到,早退。如果上午签到迟到,签退早退。也算出勤半天。迟到早退次数另算。现在是要统计某段日期时间段内的出勤情况。
就看谁有能力了,不缺的分 。其实就是获得每天的签到次数,并且这些次数不包括只有上午和下午签到的。然后除以4就是出勤天数。数据库是sqlserver2000。签到签退都有提前和推后时间,过了时间久不能签到签退了
Id SignTime
SignDate SignNum UserNameSignState
18:32
2010-8-301 路人甲迟到
2 8:15
2010-8-30 1 beyond正常
3 8:00
2010-8-29 1 beyond正常
5 12:00
2010-8-30 2 路人甲正常
6 2:00
2010-8-30 3 路人甲正常
7 5:25
2010-8-30 4 路人甲早退
8 8:10
2010-8-21 1 路人甲正常
9 12:00
2010-8-21 2 路人甲正常
10 2:00
2010-8-21 3 路人甲正常
11 6:00
2010-8-21 4 路人甲正常
12 8:10
2010-8-22 1 济公正常
13 12:00
2010-8-22 2 济公正常
14 2:35
2010-8-23 3 济公迟到
15 5:00
2010-8-23 4 济公早退
16 1:00
2010-8-29 2 beyond正常
Signnum的值1代表上午签到2代表上午签退3代表下午签到4代表下午签退

回复

使用道具 举报

千问 | 2010-9-3 12:11:38 | 显示全部楼层
弱弱的问一句,什么数据库?再一个,你把各个时间点也给一下,譬如早8点算正常上班,这种信息你也该给出来的,顺便给你点提示这种东西按一对一对来算,譬如上午签到和签退算一对,那么如果签到时间>8点或签退时间<11点则算旷工半天,所以不能考虑除以4的情况还是先把什么数据库弄出来吧,要不时间函数都不一样,不太好弄,还有最好列举几条数据 ---补充---id,编号signTime,签到时间signDate,签到日期 signNum,签到次序 username,签到人 signState,签到状态 create table test (id int,signTime varchar(8),signDat
回复

使用道具 举报

千问 | 2010-9-3 12:11:38 | 显示全部楼层
因为没有签到就不能签退,而光签到不签退算旷工,应此只要统计签退次数就可以了slect UserName,count(*)/2 from 表 where SignDate between 开始时间 and 结束时间and SignNum in (2,4)group by UserName 其他算迟到的时候应该将没有签退的去掉,不然迟到次数就
回复

使用道具 举报

千问 | 2010-9-3 12:11:38 | 显示全部楼层
50分,只能笑而不语了。除非碰到我们公司要用,否则很难慢慢去琢磨。SQL比较难实现,做个小程序实现应该是没问题的。
回复

使用道具 举报

千问 | 2010-9-3 12:11:38 | 显示全部楼层
怎么没有加班的状态呢我是上班的,我不想挣这50分,呵呵
回复

使用道具 举报

千问 | 2010-9-3 12:11:38 | 显示全部楼层
需要结合程序来处理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行