获取考勤记录每天的前四次打卡时间

时间:2023-03-18 06:16:09 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

获取张三某个日期段内每天的前四次打卡情况

返回结果如下

日期 第一次打卡时间 第二次打卡时间 第三次打卡时间 第四次打卡时间

2013-12-01 08:00:22 12:01:23 13:24:28 18:25:11

2013-12-02 08:50:22 12:03:23 13:04:28 18:05:11

存储过程:

create proc GetEmpAttendRegionNew

@empNo varchar(20),@dtFrom datetime,@dtTo datetime

as

BEGIN

create table #tAttInfo

(EmpNo varchar(20),dt datetime,

FirstPunchTime datetime,SecondPunchTime datetime,

ThirdPunchTime datetime,FourthPunchTime datetime)

declare @dt datetime

set @dt=@dtFrom

declare

@FirstPunchTime datetime, --第一次打卡时间

@SecondPunchTime datetime, --第二次打卡时间

@ThirdPunchTime datetime, --第三次打卡时间

@FourthPunchTime datetime --第四次打卡时间

while @dt<=@dtTo

begin

set @FirstPunchTime=null

set @SecondPunchTime=null

set @ThirdPunchTime=null

set @FourthPunchTime=null

select @FirstPunchTime=PunchTime from AttendRecord where EmployeeNo=@empNo

and Convert(varchar(10),PunchTime,120)=Convert(varchar(10),@dt,120)

order by PunchTime desc --按打卡时间逆序排序 最后一次就是最小时间

select @SecondPunchTime=PunchTime from AttendRecord where EmployeeNo=@empNo

and PunchTime>@FirstPunchTime

and Convert(varchar(10),PunchTime,120)=Convert(varchar(10),@dt,120)

order by PunchTime desc --大于第一次打卡时间 中 最小的 就是第二次

select @ThirdPunchTime=PunchTime from AttendRecord where EmployeeNo=@empNo

and PunchTime>@SecondPunchTime

and Convert(varchar(10),PunchTime,120)=Convert(varchar(10),@dt,120)

order by PunchTime desc

select @FourthPunchTime=PunchTime from AttendRecord where EmployeeNo=@empNo

and PunchTime>@ThirdPunchTime

and Convert(varchar(10),PunchTime,120)=Convert(varchar(10),@dt,120)

order by PunchTime desc

insert into #tAttInfo values (@empNo,@dt,

@FirstPunchTime,@SecondPunchTime,@ThirdPunchTime,@FourthPunchTime)

set @dt=dateadd(day,1,@dt)

end

select * from #tAttInfo

drop table #tAttInfo

END

调用该存储过程,返回一个表格:

exec GetEmpAttendRegionNew '张三','2013-12-01','2013-12-31'

本文来源:https://www.wddqw.com/doc/d355553be87101f69e319548.html