22,210
社区成员
发帖
与我相关
我的任务
分享
create table mtest(id int primary key,name varchar(10),time datetime);
insert into mtest values(1,'10001','2015-1-1 12:00:00');
insert into mtest values(2,'10002','2015-1-1 12:00:30');
insert into mtest values(3,'10001','2015-1-1 12:00:20');
insert into mtest values(4,'10001','2015-1-1 12:00:40');
insert into mtest values(5,'10001','2015-1-1 12:10:40');
insert into mtest values(6,'10002','2015-1-1 12:01:40');
insert into mtest values(7,'10003','2015-1-1 12:21:40');
insert into mtest values(8,'10001','2015-1-1 12:05:20');
insert into mtest values(9,'10001','2015-1-1 12:05:40');
create table mtest(id int primary key,name varchar(10),time datetime);
insert into mtest values(1,'10001','2015-1-1 12:00:00');
insert into mtest values(2,'10002','2015-1-1 12:00:30');
insert into mtest values(3,'10001','2015-1-1 12:00:20');
insert into mtest values(4,'10001','2015-1-1 12:00:40');
insert into mtest values(5,'10001','2015-1-1 12:10:40');
insert into mtest values(6,'10002','2015-1-1 12:01:40');
insert into mtest values(7,'10003','2015-1-1 12:21:40');
insert into mtest values(8,'10001','2015-1-1 12:05:20');
insert into mtest values(9,'10001','2015-1-1 12:05:40');
select * from mtest
SELECT * ,
RANK() OVER (PARTITION BY name ORDER BY [time])'rank' INTO mtest1 FROM mtest;
WITH t AS (SELECT a.* ,
DATEDIFF(minute, a.[time], b.[time]) 'Bminute' ,
DATEDIFF(minute, c.[time], a.[time]) 'Cminute'
FROM mtest1 a
LEFT JOIN mtest1 b ON a.name = b.name AND a.rank = b.rank - 1
LEFT JOIN mtest1 c ON a.name = c.name AND a.rank = c.rank + 1)
SELECT t.id ,
t.name ,
t.[time]
FROM t
WHERE Bminute BETWEEN 0 AND 3 OR Cminute BETWEEN 0 AND 3
SELECT
id,name,time
FROM (
SELECT
*,
LAG(time,1,time) OVER(PARTITION BY name ORDER BY time) AS BeforTime,
LEAD(time,1,GETDATE()) OVER(PARTITION BY name ORDER BY time) AS NextTime
FROM mtest
) a
WHERE DATEDIFF(ss,BeforTime,time)<180 OR DATEDIFF(ss,time,NextTime)<180
select *
from mtest
order by name,time