Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

sql查询连续七天以上都有打卡的员工记录

陈诺  发表于:2013-06-12 17:57:38  
复制

请帮忙看下以下这段代码哪里出错???

 

--建立游标的查询忽略了过滤一天内多次打卡
declare @c1 varchar(50)
declare @time1 varchar(50)
declare @
工号 varchar(50)
declare @time2 varchar(50)
declare @i int    --
连续打卡天数

--
建立游标,查询按工号和打卡时间排序
DECLARE f_Cursor CURSOR FOR SELECT
员工工号 FROM 打卡表  order by 员工工号 ,打卡时间

 --建立临时表,留备记录
create table #table (
工号 varchar(50),连续打卡天数 varchar(50))

OPEN f_Cursor
set @
工号 = ''
set @i=0
FETCH NEXT FROM f_Cursor into @c1 ,@time1
--set @
工号=@c1
set @time2=@time1
WHILE @@FETCH_STATUS = 0
BEGIN
if @
工号=@c1 --判断取出的记录工号与暂存工号相同,
begin
--
当时间间隔为1,连续打卡天数加1;
if datediff(day,@time2,@time1)=1
set @i=@i+1
else
begin
--
判断是否超过7,超过则写入记录,再将连续打卡天数重置为1
if @i>=7
insert into #table (
工号,连续打卡天数) values (@工号,@i)
set @i=1
end
set @time2=@time1
end
else --
工号不同,连续打卡天数重新为1,分析之前的员工是否连续打卡7,并进行记录
--
完成后将新获得的工号及打卡时间传入暂存工号
begin
if @i>=7 --
写入超过7天的工号及天数数据
insert into #table (
工号,连续打卡天数) values (@工号,@i)
--
将新的工号和打卡时间传入
set @
工号=@c1
set @time2 =@time1
set @i=1
end
FETCH NEXT FROM f_Cursor into @c1,@time1
END
CLOSE f_Cursor
DEALLOCATE f_Cursor

 

得到查询结果
select * from #table
drop table #table

 

 

Top
陈诺 发表于:2013-06-14 22:37:33

怎么没人解答了。。。

高手不要再潜水,拜托了。。。呵呵。



陈诺 发表于:2013-06-15 13:09:23

问题找到了。

建立游标时,语句中要加“打卡时间”

DECLARE f_Cursor CURSOR FOR SELECT 员工工号,打卡时间 FROM 打卡表 order by 员工工号,打卡时间

总记录:2篇  页次:1/1 9 1 :