重发:Sql server 同一时间段内相同项重复数据 本帖最后由 qinw2007 于 2011-11-27 17:22:50 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 亲:我上次给你的查询语句能准确查出来的.你的这次数据比较乱,但有一点你没说明白,那就是,相同的培训项目名称,但地点不同,就算不同的培训.另外,你仔细瞧瞧,你上面结果中的张三公务培训6,并没有与上面有冲突时间哪,上面的时间都是在9号前的!按你的要求,把上次帖子的语句改了一下,请及时结帖哦!create table tb(姓名 nvarchar(10),培训项目名称 nvarchar(10),培训地点 nvarchar(10),开始日期 datetime,开始时间 int,结束日期 datetime,结束时间 int)insert into tb select '张三','公务培训','北京','2009-01-03',9,'2009-01-09',17insert into tb select '李四','公务培训','北京','2011-01-03',9,'2011-01-09',17insert into tb select '王五','公务培训1','北京','2011-01-03',9,'2011-01-09',17insert into tb select '赵六','公务培训1','北京','2011-01-03',9,'2011-01-09',17insert into tb select '张三','公务培训','上海','2011-01-04',9,'2011-01-06',16insert into tb select '王五','公务培训3','南京','2011-01-05',9,'2011-01-10',11insert into tb select '王五','公务培训4','济南','2011-01-07',9,'2011-01-10',17insert into tb select '张三','公务培训','杭州','2011-01-06',9,'2011-01-06',16insert into tb select '张三','公务培训6','苏州','2011-01-09',9,'2011-01-16',17--insert into tb select '张三','公务培训7','天津','2011-01-20',9,'2011-01-20',17goselect * from tb awhere exists(select 1 from tb where 姓名=a.姓名 and (培训项目名称<>a.培训项目名称 or 培训地点<>a.培训地点) and (dateadd(hh,a.开始时间,a.开始日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期) or dateadd(hh,a.结束时间,a.结束日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期) or (dateadd(hh,a.开始时间,a.开始日期)<dateadd(hh,开始时间,开始日期) and dateadd(hh,a.结束时间,a.结束日期)>dateadd(hh,开始时间,开始日期))))order by 姓名/*姓名 培训项目名称 培训地点 开始日期 开始时间 结束日期 结束时间---------- ---------- ---------- ----------------------- ----------- ----------------------- -----------王五 公务培训1 北京 2011-01-03 00:00:00.000 9 2011-01-09 00:00:00.000 17王五 公务培训3 南京 2011-01-05 00:00:00.000 9 2011-01-10 00:00:00.000 11王五 公务培训4 济南 2011-01-07 00:00:00.000 9 2011-01-10 00:00:00.000 17张三 公务培训 杭州 2011-01-06 00:00:00.000 9 2011-01-06 00:00:00.000 16张三 公务培训 上海 2011-01-04 00:00:00.000 9 2011-01-06 00:00:00.000 16(5 行受影响)*/godrop table tb qianjin036a:培训项目名称、培训地点能否不考虑,有可能相同 那把这一段去掉就行了: and (培训项目名称<>a.培训项目名称 or 培训地点<>a.培训地点) 急问!分页存储过程的问题 完了!误操作!怎么恢复啊?急! update 更新语句疑问 如何不让用户通过企业管理器查看本机数据库表里面的数据? 奇怪的现象,逻辑思维强的进来帮帮!! 求最在值问题.为什么不对呢.请帮忙看看.谢谢了! 两个要求,征求一下思路 在SQL Server 2000中怎样定义变量类型? 表数据量太大了,造成速度减慢。有什么解决方案(详细问题) 除了sqlplus还能用什么? sql表多对多的查询 sql server 这条sql为什么报错?
我上次给你的查询语句能准确查出来的.
你的这次数据比较乱,但有一点你没说明白,那就是,相同的培训项目名称,但地点不同,就算不同的培训.
另外,你仔细瞧瞧,你上面结果中的张三公务培训6,并没有与上面有冲突时间哪,上面的时间都是在9号前的!
按你的要求,把上次帖子的语句改了一下,请及时结帖哦!
create table tb(姓名 nvarchar(10),培训项目名称 nvarchar(10),培训地点 nvarchar(10),开始日期 datetime,开始时间 int,结束日期 datetime,结束时间 int)
insert into tb select '张三','公务培训','北京','2009-01-03',9,'2009-01-09',17
insert into tb select '李四','公务培训','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '王五','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '赵六','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '张三','公务培训','上海','2011-01-04',9,'2011-01-06',16
insert into tb select '王五','公务培训3','南京','2011-01-05',9,'2011-01-10',11
insert into tb select '王五','公务培训4','济南','2011-01-07',9,'2011-01-10',17
insert into tb select '张三','公务培训','杭州','2011-01-06',9,'2011-01-06',16
insert into tb select '张三','公务培训6','苏州','2011-01-09',9,'2011-01-16',17
--insert into tb select '张三','公务培训7','天津','2011-01-20',9,'2011-01-20',17
go
select * from tb a
where exists(select 1 from tb where 姓名=a.姓名 and (培训项目名称<>a.培训项目名称 or 培训地点<>a.培训地点)
and (dateadd(hh,a.开始时间,a.开始日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期)
or dateadd(hh,a.结束时间,a.结束日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期)
or (dateadd(hh,a.开始时间,a.开始日期)<dateadd(hh,开始时间,开始日期) and dateadd(hh,a.结束时间,a.结束日期)>dateadd(hh,开始时间,开始日期))))
order by 姓名/*
姓名 培训项目名称 培训地点 开始日期 开始时间 结束日期 结束时间
---------- ---------- ---------- ----------------------- ----------- ----------------------- -----------
王五 公务培训1 北京 2011-01-03 00:00:00.000 9 2011-01-09 00:00:00.000 17
王五 公务培训3 南京 2011-01-05 00:00:00.000 9 2011-01-10 00:00:00.000 11
王五 公务培训4 济南 2011-01-07 00:00:00.000 9 2011-01-10 00:00:00.000 17
张三 公务培训 杭州 2011-01-06 00:00:00.000 9 2011-01-06 00:00:00.000 16
张三 公务培训 上海 2011-01-04 00:00:00.000 9 2011-01-06 00:00:00.000 16(5 行受影响)*/
go
drop table tb
培训项目名称、培训地点能否不考虑,有可能相同
那把这一段去掉就行了:
and (培训项目名称<>a.培训项目名称 or 培训地点<>a.培训地点)