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

SQL2008 有列:人、时间、地点,求某人在特定时间内不在特定地点的话语

2013-08-01 
SQL2008有列:人、时间、地点,求某人在特定时间内不在特定地点的语句目前表中情况,共有三列:人、时间、地点人时

SQL2008 有列:人、时间、地点,求某人在特定时间内不在特定地点的语句
目前表中情况,共有三列:人、时间、地点

人    时间                   地点
张三 2012-06-26 20:36:10    63419-13952
李四 2012-06-26 20:36:10    63419-13900
王五 2012-06-26 20:36:10    63419-13900
赵六 2012-06-26 20:36:10    63419-13988
张三 2012-06-26 20:55:10    63419-13952
李四 2012-06-26 20:57:10    63419-13900
王五 2012-06-26 21:56:10    63419-13952
赵六 2012-06-26 22:00:55    63419-13951
张三 2012-06-26 23:02:10    63419-13911
李四 2012-06-26 23:05:10    63419-13952
王五 2012-06-26 23:10:10    63419-13877
赵六 2012-06-26 23:08:10    63419-13951

条件一:
找出在2012-06-26 20:40:10之前,地点不等于63419-13952或63419-13951的人,求语句。
满足此条件的有三条
李四 2012-06-26 20:36:10    63419-13900
王五 2012-06-26 20:36:10    63419-13900
赵六 2012-06-26 20:36:10    63419-13988

条件二:
找出在2012-06-26 20:50:10之后,2012-06-26 22:30:00之前,
地点等于63419-13952或63419-13951的人,求语句。
满足此条件的有三条
张三 2012-06-26 20:55:10    63419-13952
王五 2012-06-26 21:56:10    63419-13952
赵六 2012-06-26 22:00:55    63419-13951

条件三:
找出在2012-06-26 22:30:00之后,地点不等于63419-13952或63419-13951的人,求语句。
满足此条件的有两条
李四 2012-06-26 23:05:10    63419-13952
赵六 2012-06-26 23:08:10    63419-13951

最后,找出同时符合上述三个条件的人(只要知道结果是赵六就行,不一定要选出赵六的各个时间地点记录)
赵六 2012-06-26 20:36:10    63419-13988
赵六 2012-06-26 22:00:55    63419-13951
赵六 2012-06-26 23:08:10    63419-13951

因水平有限,恳请给出具体的语句,谢谢。
[解决办法]

create table tb(人 varchar(20), 时间 datetime, 地点 varchar(20))
insert into tb values ('张三', '2012-06-26 20:36:10','63419-13952')


insert into tb values ('李四', '2012-06-26 20:36:10','63419-13900')
insert into tb values ('王五', '2012-06-26 20:36:10','63419-13900')
insert into tb values ('赵六', '2012-06-26 20:36:10','63419-13988')
insert into tb values ('张三', '2012-06-26 20:55:10','63419-13952')
insert into tb values ('李四', '2012-06-26 20:57:10','63419-13900')
insert into tb values ('王五', '2012-06-26 21:56:10','63419-13952')
insert into tb values ('赵六', '2012-06-26 22:00:55','63419-13951')
insert into tb values ('张三', '2012-06-26 23:02:10','63419-13911')
insert into tb values ('李四', '2012-06-26 23:05:10','63419-13952')
insert into tb values ('王五', '2012-06-26 23:10:10','63419-13877')
insert into tb values ('赵六', '2012-06-26 23:08:10','63419-13951')
go

--条件一
select * from tb where 时间 < '2012-06-26 20:40:10' and 地点 not in ('63419-13952','63419-13951')
select * from tb where 时间 < '2012-06-26 20:40:10' and 地点 <> '63419-13952'  and 地点 <> '63419-13951'
/*
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 20:36:10.000                                63419-13900
王五                   2012-06-26 20:36:10.000                                63419-13900
赵六                   2012-06-26 20:36:10.000                                63419-13988



(所影响的行数为 3 行)

人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 20:36:10.000                                63419-13900
王五                   2012-06-26 20:36:10.000                                63419-13900
赵六                   2012-06-26 20:36:10.000                                63419-13988

(所影响的行数为 3 行)
*/

--条件二
select * from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and  地点 in ('63419-13952','63419-13951')
select * from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and (地点 ='63419-13952' or 地点 = '63419-13951')
/*
人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
张三                   2012-06-26 20:55:10.000                                63419-13952


王五                   2012-06-26 21:56:10.000                                63419-13952
赵六                   2012-06-26 22:00:55.000                                63419-13951

(所影响的行数为 3 行)

人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
张三                   2012-06-26 20:55:10.000                                63419-13952
王五                   2012-06-26 21:56:10.000                                63419-13952
赵六                   2012-06-26 22:00:55.000                                63419-13951

(所影响的行数为 3 行)
*/

--条件三 :地点不等于63419-13952或63419-13951的人 应该是:地点等于63419-13952或63419-13951的人
select * from tb where 时间 > '2012-06-26 22:30:00' and 地点 in ('63419-13952','63419-13951')
select * from tb where 时间 > '2012-06-26 22:30:00' and (地点 = '63419-13952' or 地点 = '63419-13951')
/*
人                    时间                                                     地点                   


-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 23:05:10.000                                63419-13952
赵六                   2012-06-26 23:08:10.000                                63419-13951

(所影响的行数为 2 行)

人                    时间                                                     地点                   
-------------------- ------------------------------------------------------ -------------------- 
李四                   2012-06-26 23:05:10.000                                63419-13952
赵六                   2012-06-26 23:08:10.000                                63419-13951

(所影响的行数为 2 行)

*/

--找出同时符合上述三个条件的人
select t1.人 
from 
(select * from tb where 时间 < '2012-06-26 20:40:10' and 地点 not in ('63419-13952','63419-13951')) t1,
(select * from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and  地点 in ('63419-13952','63419-13951')) t2,
(select * from tb where 时间 > '2012-06-26 22:30:00' and 地点 in ('63419-13952','63419-13951')) t3
where t1.人 = t2.人 and t1.人 = t3.人

select 人 from 


(
select distinct 人 from tb where 时间 < '2012-06-26 20:40:10' and 地点 not in ('63419-13952','63419-13951') 
union all
select distinct 人 from tb where 时间 > '2012-06-26 20:50:10' and 时间 < '2012-06-26 22:30:00' and  地点 in ('63419-13952','63419-13951')
union all
select distinct 人 from tb where 时间 > '2012-06-26 22:30:00' and 地点 in ('63419-13952','63419-13951')
) t
group by 人 having count(1) = 3

select t1.人 from tb t1 , tb t2 , tb t3
where t1.人 = t2.人 and t1.人 = t3.人 and
(t1.时间 < '2012-06-26 20:40:10' and t1.地点 not in ('63419-13952','63419-13951')) and
(t2.时间 > '2012-06-26 20:50:10' and t2.时间 < '2012-06-26 22:30:00' and  t2.地点 in ('63419-13952','63419-13951')) and
(t3.时间 > '2012-06-26 22:30:00' and t3.地点 in ('63419-13952','63419-13951'))
/*
人                    
-------------------- 
赵六

(所影响的行数为 1 行)

人                    
-------------------- 
赵六

(所影响的行数为 1 行)

人                    
-------------------- 
赵六

(所影响的行数为 1 行)

*/

drop table tb


[解决办法]
--找出在2012-06-26 20:40:10之前,地点不等于63419-13952或63419-13951的人
select 人 from 表 where 时间 < '2012-06-26 20:40:10' and 地点 not in ('63419-13952','63419-13951')

--找出在2012-06-26 20:50:10之后,2012-06-26 22:30:00之前,地点等于63419-13952或63419-13951的人
select 人 from 表 where 时间 between '2012-06-26 20:50:10' and '2012-06-26 22:30:00' and 地点 in('63419-13952','63419-13951')

--找出在2012-06-26 22:30:00之后,地点不等于63419-13952或63419-13951的人
select 人 from 表 where 时间 > '2012-06-26 22:30:00' and 地点 not in ('63419-13952','63419-13951') -- 这里你的问题写错了和输出不一致,not in表示不在,in表示在,自己改

热点排行