SQL 极值、累加一起,谢谢。

yan_terry 2018-07-09 06:00:06
请教各位:
气象数据表:t_data
台站名 观测时间 温度 湿度 雨量
stationName obsTime T RH Rain

数据每分钟都有,如:
M0001 2017-05-06 12:00:00 35.2 70 0.2
M0002 2017-05-06 12:05:00 35.1 71 0.1

需要按按月统计:
本月 本台站 极高温度极其出现时间(即最高温那条记录里的观测时间字段),极低湿度及其出现时间 ,累计雨量。

得出的数据应该是每台站每月一条记录如:
stationName obsmonth maxT maxTtime minRH minRHtime Rain
M0001 2017-05 36.0 20170701 13:00:00 …. ….. sumRain
M0002

只统计极值还好,但还有雨量的累加。请大家指导下,谢谢!
...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2018-07-10
  • 打赏
  • 举报
回复

select stationName,obsTime as obsmonth,max(B.T) as maxT,max(mastTtime) as maxTtime,max(RH) as minRH,max(minRHtime) AS minRHtime,sum(Rain) as sumrain
from
(select A.stationName,convert(varchar(7),A.obsTime,120) as obsTime,Rain,B.T,B.obsTime as mastTtime,C.RH,C.obsTime as minRHtime 
from t_data A
outer apply (select top 1 T,obsTime from t_data where A.stationName=stationName and convert(varchar(7),A.obsTime,120)=convert(varchar(7),obsTime,120) order by T desc) as B
outer apply (select top 1 RH,obsTime from t_data where A.stationName=stationName and convert(varchar(7),A.obsTime,120)=convert(varchar(7),obsTime,120) order by RH) as C) as A
group by stationName,obsTime
shinger126 2018-07-10
  • 打赏
  • 举报
回复
如果数据量比较大的话,建议在原表上加一个计算列,值为convert(varchar(7),obstime,120) ,然后在这个列上建个索引,这样会比较快
shinger126 2018-07-10
  • 打赏
  • 举报
回复
;WITH t AS (SELECT CONVERT(VARCHAR(7),obstime,120) obsmonth, *,
ROW_NUMBER() OVER(PARTITION BY stationName,CONVERT(VARCHAR(7),obstime,120) ORDER BY RH DESC) rn,
sumRain=(SELECT SUM(Rain) FROM t_data b WHERE b.stationName=a.stationName
AND CONVERT(VARCHAR(7),b.obstime,120)=CONVERT(VARCHAR(7),a.obstime,120)
AND b.obstime<=a.obstime ) FROM t_data a)
SELECT * FROM t WHERE rn=1

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧