日期:2014-05-17  浏览次数:20532 次

查出表里面的有交叉数据(较小的那个)
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