22,209
社区成员
发帖
与我相关
我的任务
分享
with cte_1
as
(select *,row_number() over (order by datetime) as rn_1 from Web_HistoryData),
cte_2
as
(select *,row_number() over (partition by NodeID,Value order by DateTime) as rn_2 from cte_2)
select NodeID,rn_1-rn_2,count(*) as frequency
from cte_2
group by NodeID,rn_1-rn_2
declare @t datetime ='2018-08-27'
;with t1 as (select nodeid,[datetime],n1=datediff(mi,@t,[datetime]),n2 =row_number()over(partition by nodeid,value order by [datetime]),[value] from Web_HistoryData)
,t2 as (select nodeid,value,min(n1)r1,max(n1)r2,count(1)ct from t1 group by nodeid,[value],n1-n2 having count(1)>=20)
select nodeid,dateadd(mi,r1,@t)dt_start,dateadd(mi,r2,@t)dt_end,ct from t2
/*nodeid dt_start dt_end ct
1 2018-08-27 00:02:00.000 2018-08-27 03:49:00.000 228
1 2018-08-27 03:51:00.000 2018-08-27 19:49:00.000 959
1 2018-08-27 19:51:00.000 2018-08-28 00:00:00.000 250
2 2018-08-27 00:01:00.000 2018-08-27 01:09:00.000 69
2 2018-08-27 01:11:00.000 2018-08-27 13:49:00.000 759
2 2018-08-27 13:51:00.000 2018-08-28 00:00:00.000 610
*/