sql server计算全省日均、年均

用到的知识点:
1.按年、日分组convert函数
2.按日期循环自动补录区间数据
3.自动补录如果已经补录过再次运行不会重复补录
分手动补录和自动补录sql语句:

手动补录sql语句:

use [GWAMDB]


DECLARE @s_time datetime
DECLARE @e_time datetime
declare  @ii INT 
declare  @jj INT 

declare @i datetime
declare @j datetime
declare @h datetime
declare @m datetime
declare @a datetime

set @i='2022-01-01'   --全年初始时间,全年,一般不用变

set @s_time = '2022-01-01'  --全年、当月开始补录时间,可以自定义
set @e_time = '2022-01-14'  --全年、当月补录结束时间,可以自定义
set @ii = DATEDIFF(DAY,@s_time,@e_time)
set @jj = 0

while @jj <= @ii   --日期循环  ,手动补录的话要取消这行注释


BEGIN
	set @a = DATEADD(DAY, @jj, @s_time)
    --年均
 	INSERT INTO[tt1](datetime, type, PM25)
   SELECT @a,'全年累积平均浓度', round(AVG(pm25),0) as PM25 FROM [dbo].[ZHZSJS] where datetime BETWEEN @i and @a and  LEFT(citycode,2) in ('13') 
   group BY CONVERT(VARCHAR(4),datetime,120)
   ORDER BY CONVERT(VARCHAR(4),datetime,120);
	set @jj = @jj +1
END

     --当日
     INSERT INTO[tt1](datetime, type, PM25)
     SELECT DISTINCT CONVERT(VARCHAR(10),datetime,120), '当日平均值浓度', round(AVG(pm25),0) as PM25 FROM [dbo].[ZHZSJS] where datetime BETWEEN @s_time and  @e_time and  LEFT(citycode,2) in ('13') 
     group BY CONVERT(VARCHAR(10),datetime,120)
     ORDER BY CONVERT(VARCHAR(10),datetime,120);

自动补录昨日日均数据:

-- DROP TABLE tt1;

use [GWAMDB]

-- create table tt1
--  (datetime datetime,
--   type varchar(50),
--   PM25 float);

declare @i datetime
declare @j datetime
declare @h datetime
declare @m datetime
set @i='2022-01-01'   --全年
-- set @m='2022-02-01'   --当月
-- set @j='2022-02-01'   --自定义全部补录日期
set @j=(select max(datetime) FROM [ZHZSJS])
set @h=(select max(datetime) FROM [tt1])

  if @j > @h
     BEGIN
--        当日平均浓度不需要一天一天补录,它按datetime每天分组填入
           INSERT INTO[tt1](datetime, type, PM25)
           SELECT DISTINCT CONVERT(VARCHAR(10),datetime,120), '当日平均值浓度', round(AVG(pm25),0) as PM25 FROM [dbo].[ZHZSJS] where datetime =  @j and  LEFT(citycode,2) in ('13') 
           group BY CONVERT(VARCHAR(10),datetime,120)
           ORDER BY CONVERT(VARCHAR(10),datetime,120);
 
-- 全年累积平均,需要设置@j,@i默认为1月1日,一天一天补录
          INSERT INTO[tt1](datetime, type, PM25)
          SELECT @j as aa,'全年累积平均浓度', round(AVG(pm25),0) as PM25 FROM [dbo].[ZHZSJS] where datetime BETWEEN @i and @j and  LEFT(citycode,2) in ('13') 
          group BY CONVERT(VARCHAR(4),datetime,120)
          ORDER BY CONVERT(VARCHAR(4),datetime,120);
    end


-- select DISTINCT datetime, type as '全省当日/当月累积', PM25 from tt1    ORDER BY datetime ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值