sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值
采用c#开发dll,并添加到sql server 中。
具体代码,可以用visual studio的向导生成模板。
- using System;
- using System.Collections;
- using System.Data;
- using Microsoft.SqlServer.Server;
- using System.Data.SqlTypes;
- using System.IO;
- using System.Text;
- [Serializable]
- [Microsoft.SqlServer.Server.SqlUserDefinedAggregate(
- Format.UserDefined, //use clr serialization to serialize the intermediate result
- IsInvariantToNulls = true, //optimizer property
- IsInvariantToDuplicates = false, //optimizer property
- IsInvariantToOrder = false, //optimizer property
- MaxByteSize = ) //maximum size in bytes of persisted value
- ]
- public class MAX_O3_8HOUR_ND : IBinarySerialize
- {
- /// <summary>
- /// The variable that holds the intermediate result of the concatenation
- /// </summary>
- private StringBuilder intermediateResult;
- /// <summary>
- /// 系统初始化
- /// </summary>
- public void Init()
- {
- this.intermediateResult = new StringBuilder();
- }
- /// <summary>
- /// 积累文本内容,null除外,一般用标点符号隔开。
- /// </summary>
- /// <param name="value"></param>
- public void Accumulate(SqlString value)
- {
- if (value.IsNull)
- {
- return;
- }
- this.intermediateResult.Append(value.Value).Append(',');
- }
- /// <summary>
- /// Merge the partially computed aggregate with this aggregate.
- /// </summary>
- /// <param name="Group"></param>
- public void Merge(MAX_O3_8HOUR_ND Group)
- {
- this.intermediateResult.Append(Group.intermediateResult);
- }
- /// <summary>
- ///在最后被调用,返回聚合函数结果
- /// </summary>
- /// <returns></returns>
- public SqlString Terminate()
- {
- string output = string.Empty;
- ArrayList list = new ArrayList();
- if (this.intermediateResult != null&& this.intermediateResult.Length > )
- {
- output = this.intermediateResult.ToString(, this.intermediateResult.Length - );
- string [] result=output.Split(',');
- float max = ;
- if (result.Length >= )
- {
- for (int i = ; i <= result.Length - ; i++)
- {
- float re = ;
- for (int j = i; j < + i; j++)
- {
- re = re + Convert.ToSingle(result[j]);
- }
- re=re/;
- if (re > max)
- {
- max = re;
- }
- }
- output = Math.Ceiling(max).ToString();
- }
- else
- {
- output=string.Empty;
- }
- }
- return new SqlString(output);
- }
- public void Read(BinaryReader r)
- {
- intermediateResult = new StringBuilder(r.ReadString());
- }
- public void Write(BinaryWriter w)
- {
- w.Write(this.intermediateResult.ToString());
- }
- }
dll添加到sql server,创建聚合函数。
- CREATE ASSEMBLY [MAX_O3_8HOUR_ND] AUTHORIZATION [dbo]
- FROM 'c:\MAX_O3_8HOUR_ND.dll'
- WITH PERMISSION_SET = SAFE;
- CREATE AGGREGATE [dbo].[MAX_O3_8HOUR_ND] (@FieldValue [nvarchar]())
- RETURNS [nvarchar]()
- EXTERNAL NAME [MAX_O3_8HOUR_ND].[MAX_O3_8HOUR_ND];
sql server 开启 CLR支持:
- EXEC sp_configure 'clr enabled',
- RECONFIGURE WITH OVERRIDE
- GO
示例:
SELECT FDATE,SITENAME, dbo.MAX_O3_8HOUR_ND(O3)
FROM (select top 100 percent * from MONITOR_ND order by ftime)a
GROUP BY SITENAME,FDATE
sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值的更多相关文章
- oracle 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值
create or replace function MAX_O3_8HOUR_ND(value NUMBER) return NUMBER parallel_enable aggregate usi ...
- SQL Server的各种聚合函数
聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体有哪些聚合函数呢?我们来一一看一下: 1. AVG 返回指定组中的平 ...
- SQL Server 2012 - 内置函数
文本函数 --系统函数位置: 可编程性→函数→系统函数 -- 查询ASCII码 select ASCII('a') --查询数值对应的ASCII码 select CHAR(97) --Left . R ...
- Sql Server系列:聚合函数
1 SUM SUM是一个求和函数,返回指定列值的总和.SUM 只能用于数字列. 其中忽略 Null 值. 语法 SUM ( [ ALL | DISTINCT ] expression ) OVER ( ...
- SQL Server 2012中LEAD函数简单分析
LEAD函数简单点说,就是把下一行的某列数据提取到当前行来显示,看示例更能解释清楚,先看测试用脚本 DECLARE @TestData TABLE( ID INT IDENTITY(1,1), Dep ...
- SQL Server 自定义聚合函数
说明:本文依据网络转载整理而成,因为时间关系,其中原理暂时并未深入研究,只是整理备份留个记录而已. 目标:在SQL Server中自定义聚合函数,在Group BY语句中 ,不是单纯的SUM和MAX等 ...
- SQL Server 2012/2016/2017 新增函数
/************************************************************** SQL Server 2012 新增的函数 ************** ...
- Spark基于自定义聚合函数实现【列转行、行转列】
一.分析 Spark提供了非常丰富的算子,可以实现大部分的逻辑处理,例如,要实现行转列,可以用hiveContext中支持的concat_ws(',', collect_set('字段'))实现.但是 ...
- SQL Server ->> FIRST_VALUE和LAST_VALUE函数
两个都是SQL SERVER 2012引入的函数.用于返回在以分组和排序后取得最后一行的某个字段的值.很简单两个函数.ORDER BY字句是必须的,PARITION BY则是可选. 似乎没什么好说的. ...
随机推荐
- jQuery的dom操作(二)转
addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之后插入内容. append() 向匹配的元素内部追加内容. appendTo() 向匹配的元素内部追加内容. attr ...
- python中新式类和经典类的区别
1).python在类中的定义在py2-3版本上是使用的有新式类和经典类两种情况,在新式类和经典类的定义中最主要的区别是在定义类的时候是否出现引用object;如:经典类:Class 类名::而新式类 ...
- PostgreSQL 对字段大小写敏感
缘起 iso=> \d+ test; Table "public.test" Column | Type | Modifiers | Storage | Descriptio ...
- [Sublime Text] How to Install Sublime Text on Ubuntu
For Sublime-Text-2: sudo add-apt-repository ppa:webupd8team/sublime-text- sudo apt-get update sudo a ...
- DTMF Stresstesting
import threading,time,serial,sys from random import randrange port_snd=14 port_recv=2 recnt=0 ser_ ...
- Java堆
1. Java堆的内存是由操作系统分配给JVM的内存部分. 2. Java的对象是在堆中创建 3. Java堆空间为了垃圾回收分为三个区域或代,叫做新代,年老代和永久代.在Hotspot JVM中永久 ...
- Idea 安装 lombok
idea 目前是Java开发者最流行的一款编辑器.为了让java开发更加的简便idea 也提供了lombok的插件. 插件的按钮方式为: 1.进入idea的.setting面板 2.按照以下图进行操作 ...
- devexpress13学习系列(四)PDFViewer(4)
PdfViewer的属性: CurrentPageNumber:显示当前页的页码. DocumentFilePath:当前文件. DocumentProperties:文件属性. PageCount: ...
- C++Primer 第九章
//1.vector:可变大小数组.支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢.注意点:不要在vector中存放bool类型,vector<bool>并不是一个容器,其实现方 ...
- SQL百分比
百分比=cast(cast(count(ProvinceName)*100./ (select count(Id) from dbo.TopicCurrent where boardId=316 ...