查出表里面的有交叉数据(较小的那个)
Z010345 李东明 事假 2012-10-15 00:00:00.000 2012-10-31 00:00:00.000 1900-01-01 15:00:00.000 1900-01-01 20:00:00.000
Z010345 李东明 事假 2012-10-15 00:00:00.000 2012-10-31 00:00:00.000 1900-01-01 08:00:00.000 1900-01-01 20:00:00.000
M008763 何雨 休息 2012-11-04 00:00:00.000 2012-11-04 00:00:00.000 1900-01-01 08:00:00.000 1900-01-01 20:00:00.000
M008763 何雨 休息 2012-11-04 00:00:00.000 2012-11-04 00:00:00.000 1900-01-01 08:00:00.000 1900-01-01 20:00:00.000
比如,李东明的因为第一条在第二条里面所以需要删除第一条,保留第二条。
何雨因为是一样的需要去掉第三条即可。
一条允许有两条记录但是不能有交叉
------解决方案--------------------select *
from tb a
where exists (
select 1 from (select 工号,min(开始日期)开始日期,min(结束日期)结束日期,min(开始时间)开始时间,min(结束时间)结束时间
from tb
group by 工号
) b where a.工号=b.工号 and a.开始日期=b.开始日期 and a.结束日期=b.结束日期 and a.开始时间=b.开始时间
and a.结束时间=b.结束时间
)
------解决方案--------------------试试
SELECT *
FROM tb a
WHERE EXISTS ( SELECT 1
FROM ( SELECT 工号 ,
假期 ,
MIN(开始日期) 开始日期 ,
MIN(结束日期) 结束日期 ,
MIN(开始时间) 开始时间 ,
MIN(结束时间) 结束时间
FROM tb
GROUP BY 假期 ,
工号
) b
WHERE a.工号 = b.工号
AND a.开始日期 = b.开始日期
&n