這裏有一個方法與相關子查詢
declare @table table (Tagname varchar(4), TS datetime, Val decimal(3,2))
insert into @table
values
('tag1','2011-01-01 00:00:00.000',4.67),
('tag1','2011-01-01 00:01:00.000',5.67),
('tag1','2011-01-01 00:02:00.000',6.67),
('tag1','2011-01-01 00:03:00.000',6.67),
('tag1','2011-01-01 00:04:00.000',4.67),
('tag1','2011-01-01 00:05:00.000',5.67), --start of return rows
('tag1','2011-01-01 00:06:00.000',5.67),
('tag1','2011-01-01 00:07:00.000',6.67),
('tag1','2011-01-01 00:08:00.000',6.67),
('tag1','2011-01-01 00:09:00.000',7.67),
('tag1','2011-01-01 00:10:00.000',7.67),
('tag1','2011-01-01 00:11:00.000',7.67),
('tag1','2011-01-01 00:12:00.000',7.67),
('tag1','2011-01-01 00:13:00.000',7.67),
('tag1','2011-01-01 00:14:00.000',7.67),
('tag1','2011-01-01 00:15:00.000',7.67),
('tag1','2011-01-01 00:16:00.000',7.67),
('tag1','2011-01-01 00:17:00.000',7.67),
('tag1','2011-01-01 00:18:00.000',7.67),
('tag1','2011-01-01 00:19:00.000',7.67), --15 min mark
('tag1','2011-01-01 00:20:00.000',7.67),
('tag1','2011-01-01 00:21:00.000',7.67)
;with cte as(
select
t.Tagname
,t.TS
,t.Val
,OV = (select min(Val) from @table t2 where t2.Tagname = t.Tagname and t2.TS <= dateadd(minute,15,t.TS) and t2.TS >= t.TS)
from
@table t)
select
Tagname,
TS
from
cte
where Val >5 and OV > 5
使用連接
;with cte2 as(
select
t.Tagname
,t.TS
,t.Val
,OV = min(t2.Val)
from
@table t
inner join
@table t2 on
t2.Tagname = t.Tagname and t2.TS <= dateadd(minute,15,t.TS) and t2.TS >= t.TS
group by
t.Tagname
,t.TS
,t.Val)
select *
from cte2
where val> 5 and OV > 5
不幸的是,該系統沒有進入LAG命令。我曾經考慮過使用它。 – James