分组求最大及出现时间
SQL Server:
日期 站点 最大风速风向 极大风速风向
20080131 A 029034 047336
20080201 A 036004 059007
20080202 B 028PNE 043PPN
20080209 B 039029 063001
20080210 C 030331 052341
20080130 C ////// //////
20080211 C 044333 073299
20080212 D 060024 089046
20080213 D 046023 074023
最大风速风向、极大风速风向字段中前3位为风速.
分组求站点最大风速、极大风速及出现日期,要求查询结果中包含风速和风向:
日期 站点 MAX最大风速风向 MAX极大风速风向
请大家指点,
我用:
select 站点,Max(substring(Replace(最大风速风向,'/','0'),1,3)) as 最大风速 from Fmax where 日期 between '20000101' and '20111231' GROUP BY 站点
只能求出分组的最大风速,没有风向和日期。
下面也不行:
select 日期,站点,最大风速风向
from Fmax as a
where not exists (select 1 from Fmax where 站点=a.站点 and substring(Replace(最大风速风向,'/','0'),1,3)>substring(Replace(a.最大风速风向,'/','0'),1,3))
select 日期,站点,最大风速风向
from Fmax AS a
where 最大风速风向=(select Max(substring(Replace(最大风速风向,'/','0'),1,3)) from Fmax where 站点=a.站点)
[解决办法]
declare @t table(D varchar(20),S varchar(20), X varchar(20),Y nvarchar(20))insert into @t select '20080131','A','029034','047336' union allselect '20080201','A','036004','059007' union allselect '20080202','B','028PNE','043PPN' union allselect '20080209','B','039029','063001' union allselect '20080210','C','030331','052341' union allselect '20080130','C','//////','//////' union allselect '20080211','C','044333','073299' union allselect '20080212','D','060024','089046' union allselect '20080213','D','046023','074023'select A.D,B.* from @t A,(select S,Max(left(X,3)) X1,Max(right(X,3)) X2,Max(left(Y,3)) Y1,Max(right(Y,3)) Y2 from @t where X<>'//////' and Y<>'//////'group by s) Bwhere A.S=B.S and A.X=B.X1+B.X2 and A.Y=B.Y1+B.Y2 /*(9 個資料列受到影響)D S X1 X2 Y1 Y2-------------------- -------------------- ------ ------ ---- ----20080212 D 060 024 089 046(1 個資料列受到影響)*/
[解决办法]
select t1.站点,MAX最大风速,t1.[(MAX最大风速)日期],MAX极大风速,t2.[(MAX极大风速)日期] from (select 日期 as [(MAX最大风速)日期],a.站点,最大风速,最大风速风向 as MAX最大风速 from fmax inner join ( select 站点,Max(substring(Replace(最大风速风向,'/','0'),1,3)) as 最大风速 from fmax group by 站点 ) a on substring(Replace(最大风速风向,'/','0'),1,3)=最大风速 )t1 , (select 日期 as [(MAX极大风速)日期],a.站点,极大风速,极大风速风向 as MAX极大风速 from fmax inner join ( select 站点,Max(substring(Replace(极大风速风向,'/','0'),1,3)) as 极大风速 from fmax group by 站点 ) a on substring(Replace(极大风速风向,'/','0'),1,3)=极大风速 )t2 where t1.站点=t2.站点