22,207
社区成员
发帖
与我相关
我的任务
分享
兄弟这个帖子可以结了吧
大家写的这么辛苦
Mysql
版块在
Linux/Unix平台下面
我也写个
if object_id('tb') is not null drop table tb
go
create table tb(id int,status int,datatime datetime)
insert into tb values(1 ,2 ,'2010-09-20 10:20:20')
insert into tb values(1 ,2 ,'2010-09-20 10:22:20')
insert into tb values(1 ,2 ,'2010-09-20 10:40:20')
insert into tb values(1 ,3 ,'2010-09-20 10:50:20')
insert into tb values(1 ,2 ,'2010-09-20 11:20:20')
insert into tb values(2 ,4 ,'2010-09-20 10:22:20')
insert into tb values(2 ,3 ,'2010-09-20 10:28:20')
insert into tb values(2 ,5 ,'2010-09-20 10:29:20')
insert into tb values(2 ,3 ,'2010-09-20 10:59:20')
go
select t.id,count(t.id) '次数'
from
(
select *,
(select count(*)+1 from tb where id=t.id and datatime<t.datatime) rank
from tb t
) t
join
(
select *,
(select count(*)+1 from tb where id=t.id and datatime<t.datatime) rank
from tb t
) t1
on t.id=t1.id and t.rank=t1.rank-1
and datediff(minute,t.datatime,t1.datatime)>5
group by t.id
id 次数
----------- -----------
1 3
2 2
(2 行受影响)
CREATE TABLE #1(id int,status int,datatime datetime)
INSERT #1
SELECT 1 ,2 ,'2010-09-20 10:20:20'union all
SELECT 1 ,2 ,'2010-09-20 10:22:20'union all
SELECT 1 ,2 ,'2010-09-20 10:40:20'union all
SELECT 1 ,3 ,'2010-09-20 10:50:20'union all
SELECT 1 ,2 ,'2010-09-20 11:20:20'union all
SELECT 2 ,4 ,'2010-09-20 10:22:20'union all
SELECT 2 ,3 ,'2010-09-20 10:28:20'union all
SELECT 2 ,5 ,'2010-09-20 10:29:20'union all
SELECT 2 ,3 ,'2010-09-20 10:59:20'
go
WITH Ailly
AS
(
SELECT r=ROW_NUMBER() over(order by id,status,datatime),*
from #1
)
SELECT b.id,b.status,cnt=COUNT(1)
FROM Ailly a JOIN Ailly b
on a.r=b.r-1
where DATEDIFF(N,b.datatime,a.datatime)>5
group by b.id,b.status
id status cnt
----------- ----------- -----------
1 3 1
2 3 1
2 4 1
(3 行受影响)
create table tb(id int,status int,datatime datetime)
insert into tb values(1 ,2 ,'2010-09-20 10:20:20')
insert into tb values(1 ,2 ,'2010-09-20 10:22:20')
insert into tb values(1 ,2 ,'2010-09-20 10:40:20')
insert into tb values(1 ,3 ,'2010-09-20 10:50:20')
insert into tb values(1 ,2 ,'2010-09-20 11:20:20')
insert into tb values(2 ,4 ,'2010-09-20 10:22:20')
insert into tb values(2 ,3 ,'2010-09-20 10:28:20')
insert into tb values(2 ,5 ,'2010-09-20 10:29:20')
insert into tb values(2 ,3 ,'2010-09-20 10:59:20')
go
select id , count(1) cnt from
(
select t.* , datediff(mi,t.datatime,(select top 1 datatime from tb where datatime > t.datatime and id = t.id order by datatime)) dt from tb t
) m
where dt >= 5
group by id
drop table tb
/*
id cnt
----------- -----------
1 3
2 2
(所影响的行数为 2 行)
*/
select id , count(1) from
(
select t.* , datediff(mi,m.datatime,(select top 1 datatime from tb where datatime > t.datatime and id = t.id)) dt from tb t
) m
where dt >= 5
group by id