题:
/* ============================================================ */
/* Table: t_scadaTMeas */
/* 分组,求最大(最小)值,以及该值出现的时刻。若最值多次出现,取第一次出现的时刻。 */
/* ============================================================ */
create table t_scadaTMeas
(
dtScadaTime datetime not null,
nAloge float null ,
iEquimentId integer not null,
cMeascode character(8) not null,
constraint PK_T_SCADAHOURMEAS primary key (dtScadaTime, iEquimentId, cMeascode)
)
go
insert into t_scadaTMeas values('2007/11/20 01:01:00', 1, 1, 'a1')
insert into t_scadaTMeas values('2007/11/20 01:01:03', 3, 1, 'a1')
insert into t_scadaTMeas values('2007/11/20 01:59:03', 3, 1, 'a1')
insert into t_scadaTMeas values('2007/11/20 05:01:00', 3, 1, 'a1')
insert into t_scadaTMeas values('2007/11/20 05:01:03', 2, 1, 'a1')
insert into t_scadaTMeas values('2007/11/20 05:59:03', 1, 1, 'a1')
insert into t_scadaTMeas values('2007/11/20 03:11:00', 1, 2, 'a2')
insert into t_scadaTMeas values('2007/11/20 03:21:03', 2, 2, 'a2')
insert into t_scadaTMeas values('2007/11/20 03:59:03', 1, 2, 'a2')
insert into t_scadaTMeas values('2007/11/20 23:01:00', 3, 3, 'a3')
insert into t_scadaTMeas values('2007/11/20 23:01:03', 3, 3, 'a3')
insert into t_scadaTMeas values('2007/11/20 23:59:03', 3, 3, 'a3')
/*
=== 查询结果
cMeascode iEquimentId ScadaTime max_val time_at_maxVal min_val time_at_minVal
a1 1 '2007/11/20 01:00:00' 3 '2007/11/20 01:01:03' 1 '2007/11/20 01:01:00'
a1 1 '2007/11/20 05:00:00' 3 '2007/11/20 05:01:00' 1 '2007/11/20 05:59:03'
a2 2 '2007/11/20 03:00:00' 2 '2007/11/20 03:21:03' 1 '2007/11/20 03:11:00'
a3 1 '2007/11/20 23:00:00' 3 '2007/11/20 23:01:00' 3 '2007/11/20 23:01:00'
*/
解:select b.cMeascode,b.iEquimentId,b.ScadaTime+':00:00',
max_val=b.MaxnAloge,
[time_at_maxVal]=max(case when a.nAloge=b.MaxnAloge then a.dtScadaTime end),
min_val=b.MinnAloge,
[time_at_minVal]=min(case when a.nAloge=b.MinnAloge then a.dtScadaTime end)
from
t_scadaTMeas a
join
(select cMeascode,iEquimentId,ScadaTime=convert(varchar(13),dtScadaTime,120),max(nAloge)MaxnAloge,min(nAloge)MinnAloge
from t_scadaTMeas group by cMeascode,iEquimentId,convert(varchar(13),dtScadaTime,120)) b
on a.cMeascode=b.cMeascode and a.iEquimentId=b.iEquimentId and convert(varchar(13),a.dtScadaTime,120)=b.ScadaTime and a.nAloge in(b.MaxnAloge,b.MinnAloge)
group by b.cMeascode,b.iEquimentId,b.ScadaTime,b.MinnAloge,b.MaxnAloge
/*
cMeascode iEquimentId max_val time_at_maxVal min_val time_at_minVal
--------- ----------- ------------------- ---------------------- ----------------------- ---------------------- -----------------------
a1 1 2007-11-20 01:00:00 3 2007-11-20 01:01:03.000 1 2007-11-20 01:01:00.000
a1 1 2007-11-20 05:00:00 3 2007-11-20 05:01:00.000 1 2007-11-20 05:59:03.000
a2 2 2007-11-20 03:00:00 2 2007-11-20 03:21:03.000 1 2007-11-20 03:11:00.000
a3 3 2007-11-20 23:00:00 3 2007-11-20 23:01:00.000 3 2007-11-20 23:01:00.000
(4 個資料列受到影響)
*/
736


值,以及最值出现的时刻&spm=1001.2101.3001.11974&articleId=2670647&d=1&t=3&u=7b6459f9b3ad470d8b4bea9a6909b362)

被折叠的 条评论
为什么被折叠?



