34,576
社区成员
发帖
与我相关
我的任务
分享
select b.ID
from (
select ID,MAX(checktime) 'dat'
from #PP
group by Id
) a ,#PP b
where b.checktime=a.dat and a.id=b.id and( a.id>2 or a.id<1)
SELECT T1.id , CASE WHEN ISNULL((INput - out),0) >= 0 THEN '在职' ELSE '外出未归'
end '出勤' FROM ( SELECT id,count(checktype) INput FROM @tab t WHERE checktype = 0
GROUP BY id ) T1
LEFT JOIN (SELECT id,count(checktype) Out FROM @tab t WHERE checktype = 2
GROUP BY id ) T2
ON t1.id = t2.id
DECLARE @tab TABLE (
id VARCHAR(32),
checktime DATETIME,
checktype int)
INSERT INTO @tab
SELECT '001','2009-01-21 08:30:48',0 UNION ALL
SELECT '002','2009-01-21 08:30:48',0 UNION ALL
SELECT '003','2009-01-21 12:31:00',0 UNION ALL
SELECT '001','2009-01-21 10:31:48',2 UNION ALL
SELECT '001','2009-01-21 11:31:48',3 UNION ALL
SELECT '002','2009-01-21 14:31:48',2 UNION ALL
SELECT '001','2009-01-21 15:31:48',2
SELECT id,CASE WHEN COUNTER >=0 THEN '在职'
ELSE '外出未回'
END
FROM (
SELECT T1.id , ISNULL((INput - out),0) COUNTER FROM (SELECT id,count(checktype) INput FROM @tab t WHERE checktype = 0
GROUP BY id ) T1
LEFT JOIN (SELECT id,count(checktype) Out FROM @tab t WHERE checktype = 2
GROUP BY id ) T2
ON t1.id = t2.id ) T
id 出勤
-------------------------------- --------
001 外出未回
002 在职
003 在职
DECLARE @tab TABLE (
id VARCHAR(32),
checktime DATETIME,
checktype int)
INSERT INTO @tab
SELECT '001','2009-01-21 08:30:48',0 UNION ALL
SELECT '002','2009-01-21 08:30:48',0 UNION ALL
SELECT '003','2009-01-21 12:31:00',0 UNION ALL
SELECT '001','2009-01-21 10:31:48',2 UNION ALL
SELECT '001','2009-01-21 11:31:48',3 UNION ALL
SELECT '002','2009-01-21 14:31:48',2 UNION ALL
SELECT '001','2009-01-21 15:31:48',2
SELECT * FROM (
SELECT T1.id , ISNULL((INput - out),0) COUNTER FROM (SELECT id,count(checktype) INput FROM @tab t WHERE checktype = 0
GROUP BY id ) T1
LEFT JOIN (SELECT id,count(checktype) Out FROM @tab t WHERE checktype = 2
GROUP BY id ) T2
ON t1.id = t2.id ) T
WHERE COUNTER >= 0
id COUNTER
-------------------------------- -----------
002 0
003 0
create table #PP
(
ID char(6),
checktime datetime,
checktype int
)
insert into #PP select '001','2009-01-21 08:30:48',0
union all select '002','2009-01-21 08:30:48',0
union all select '003','2009-01-21 08:31:48',0
union all select '001','2009-01-21 10:31:48',2
union all select '001','2009-01-21 11:31:48',3
union all select '002','2009-01-21 14:31:48',2
union all select '001','2009-01-21 15:31:48',2
/*
checktype打卡类型 0是上班 2是外出 3是外出返回 1是下班
现在想查询当前在岗的人员记录,也就是包括上班中和外出返回的
但是同一个员工可能外出返回了一次,又再一次外出未返回..
请问sql语句怎么写...
*/
select * from #PP where checktype in(0,3) and checktime
between '2009-01-21 08:00' and '2009-01-21 17:00'
ID checktime checktype
------ ----------------------- -----------
001 2009-01-21 08:30:48.000 0
002 2009-01-21 08:30:48.000 0
003 2009-01-21 08:31:48.000 0
001 2009-01-21 11:31:48.000 3