早教吧 育儿知识 作业答案 考试题库 百科 知识分享

SQL语句的编写,查询公司所有普通员工某一天第一次的刷卡时间和最后一次刷卡时间的汇总.公司是一个大公司,会有好多各种级别的员工,每天刷卡的时间,位置,和次数都不一样.假设有3种级别,

题目详情
SQL语句的编写,查询公司所有普通员工某一天第一次的刷卡时间和最后一次刷卡时间的汇总.
公司是一个大公司,会有好多各种级别的员工,每天刷卡的时间,位置,和次数都不一样.
假设有3种级别,老板,经理,和普通员工.
假设公司共有4个门,东南西北各一个,每个门都只有一个进来的读卡器,出去的时候是按钮.
所以也就是说每次打卡都是为了进来,除了最后一次,那必定是为了记录下班时间而打的.
比如,A最早在东门(east door)打卡纪录开始上班,在南门(south door)打卡记录下班.
这个数据库里面会有好几个月的数据,而不是一天一天的.
(上班时间信息,普通员工上班时断规定为 9:00am - 6:00 pm
早上10点后进来算旷工,其记录就不需要用作计算,9点到10点之间算迟到)
[目的] 查询某一天(比如2013-09-09)所有普通员工的上班(第一次打卡)记录,包括员工姓名,打卡时间,打卡位置,和其下班(最后一次打卡)记录.
情况1:如果有员工忘记下班打卡,也就是跟着别人出去,那么在规定的下班时间之后就不会有这个人的记录,而该员工最后一次的打卡时间就会是在规定下班时间之前,又或者一整天就只有一条进来的记录.
情况2:其情况如第二题,没有下班后的打卡记录,但是有员工是因为加班到第二天早上才打卡出去,但是又不能与其第二天重新进来上班的时间混淆.
总结:如果当天没有下班打卡记录那么就显示第二天的第一条记录.这里要考虑的就是如果该员工在第二天规定上班时间之前有两条打卡的记录,就可适用,但是如果该员工在规定上班时间之后一小时,也就是10点之前只有一条打卡记录的话,前一天就当作早退处理.
希望查询的效果就是如无意外,查询某一天(比如2013-09-09)所有普通员工的上班(第一次打卡)记录,包括员工姓名,打卡时间,打卡位置,和其下班(最后一次打卡)记录.
如有员工这天没有下班时间之后的打卡记录,而其在第二天上班时间之前有2条打卡记录的,就当作加班处理,其查询的下班时间就显示第二天的第一条记录.
满意后要多少分多可以!现在此谢过了~
▼优质解答
答案和解析
感觉只能用游标来做,普通的SQL几乎不能实现.