一年有8760个小时!(才这么点。。。)

有个气候表,存储了当地从1到8760小时的温度数据。现在,要求全年的温度每天平均值。

CREATE TABLE #Climate(h INT ,t DECIMAL(18,4));--h:小时 t:温度值
--里面有8760条记录,对应全年每小时的温度值 --现在,想将全年气温按天计算平均值,保存到表#tD
CREATE TABLE #tD(d INT ,avgt DECIMAL(18,4));--d:天 avgt:平均温度值 --最简单,就是用循环
DECLARE @d INT;
DECLARE @h1 INT,@h2 INT;
SET @d = 1;
WHILE @d <= 365
BEGIN
SET @h1 = 24 * (@d - 1);
SET @h2 = @h1 + 24; --缓存计算值到表变量
INSERT INTO #tD(d,avgt)
SELECT @d
,AVG(t)
FROM [#Climate]
WHERE h BETWEEN @h1 AND @h2; SET @d = @d + 1;
END --end of @d <= 365

但是,存储过程用循环并没有什么优势,效率不高。我们可以使用一条SQL语句来搞定它。

首先要设置一张 天 表,一年有365天,对应有365条记录

CREATE TABLE #days(d INT);
DECLARE @i INT = 1;
WHILE @i <= 365
BEGIN
INSERT INTO #days(d) VALUES(@i);
SET @i = @i + 1;
END

利用这个天表,进行聚合运算

INSERT INTO #tD(d,avgt)
SELECT ds.d
,AVG(c.t)
FROM [#Climate] c,[#days] AS ds
WHERE c.h BETWEEN 24 * (ds.d - 1) AND ds.d * 24
GROUP BY ds.d;

最新文章

  1. 在Linux虚拟机下配置tomcat
  2. 解决pip安装超时
  3. 《聚焦3D地形编程》学习点
  4. oc-05-对象的创建
  5. PHPCMS V9 导航栏当前栏目高亮
  6. Nim函数调用的几种形
  7. 半径无关快速高斯模糊实现(附完整C代码)
  8. range与enumerate的区别
  9. JFinal Druid 配置
  10. Java基础知识及学习规划【图】
  11. cowboy源码分析(三)
  12. 游戏AI
  13. 【转】【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件
  14. CCF-棋局评估 201803-04(版本 2.0)------(之前写了一个臃肿的1.0版 ,还沾沾自喜 233)
  15. pycharm安装激活及简单设置
  16. linux没有那个文件或目录
  17. filter IE滤镜(Internet Explorer)CSS
  18. 谈谈INotifyPropertyChanged和ICommand
  19. HDU 1711 Number Sequence (KMP简单题)
  20. JS图片加载时获取图片宽高信息

热门文章

  1. java中使用String的replace方法替换html模板保存文件
  2. Android sensor 系统框架 (二)
  3. JS——高级各行换色
  4. 控制台——对WIN32 API的使用(user32.dll)
  5. [Windows Server 2012] 手工破解MySQL密码
  6. Python标准库os
  7. GridView中字符串太长处理方式
  8. Web前端性能优化——提高页面加载速度
  9. CAD调用导角命令,并返回导角的圆弧对象
  10. join 和 left join 和 right join的区别?