首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

查出表里头的有交叉数据(较小的那个)

2012-12-31 
查出表里面的有交叉数据(较小的那个)Z010345李东明事假2012-10-15 00:00:00.0002012-10-31 00:00:00.00019

查出表里面的有交叉数据(较小的那个)
Z010345李东明事假2012-10-15 00:00:00.0002012-10-31 00:00:00.0001900-01-01 15:00:00.0001900-01-01 20:00:00.000
Z010345李东明事假2012-10-15 00:00:00.0002012-10-31 00:00:00.0001900-01-01 08:00:00.0001900-01-01 20:00:00.000
M008763何雨休息2012-11-04 00:00:00.0002012-11-04 00:00:00.0001900-01-01 08:00:00.0001900-01-01 20:00:00.000
M008763何雨休息2012-11-04 00:00:00.0002012-11-04 00:00:00.0001900-01-01 08:00:00.0001900-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.开始日期
                        AND a.结束日期 = b.结束日期


                        AND a.开始时间 = b.开始时间
                        AND a.结束时间 = b.结束时间
                        AND a.假期 = b.假期 )

热点排行