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则是可选. 似乎没什么好说的. ...
随机推荐
- 呛口大话APP 移动端到底怎么玩
[上海站]活动概况 时间:2016年04月09日13:30-16:30 地点:上海市黄浦区黄陂北路227号中区广场105室WE+联合办公空间 主办:APICloud.七牛.听云 报名网址:http:/ ...
- Android --http请求之HttpURLConnection
参考博客:Android HttpURLConnection 基础使用 参考博客:Android访问网络,使用HttpURLConnection还是HttpClient? String getUrl ...
- 第十五篇 Integration Services:SSIS参数
本篇文章是Integration Services系列的第十五篇,详细内容请参考原文. 简介在前一篇,我们使用SSDT-BI将第一个SSIS项目My_First_SSIS_Project升级/转换到S ...
- iOS使用NSMutableAttributedString 实现富文本(不同颜色字体、下划线等)
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...
- Chrome模拟手机浏览网页
用Chrome模拟手机浏览网页,只需要编辑一个命令就可以实现 C:\Users\xxx\AppData\Local\Google\Chrome\Application\chrome.exe --use ...
- Oracle 10046跟踪事件使用方法
1.开启10046跟踪事件 alter session set events '10046 trace name context forever, level 12'; 如果想更容易标识trace文件 ...
- TNS-01251: Cannot set trace/log directory under ADR
试图改变监听日志的名称时,报出TNS-01251错误: $ lsnrctl LSNRCTL - Production on -JUN- :: Copyright (c) , , Oracle. All ...
- display:flex 多栏多列布局
转自:http://www.360doc.com/content/14/0811/01/2633_400926000.shtml display:flex 多栏多列布局浏览器支持情况:火狐直接支持w3 ...
- java io读书笔记(7) Closing Output Streams
输出完毕后,需要close这个stream,从而使操作系统释放相关的资源.举例: public void close( ) throws IOException 并不是所有的stream都需要clos ...
- 在navgationController中添加UISegmentedControl
NSArray *segmentedArray = [NSArray arrayWithObjects:@"患者基本信息",@"患者信息",nil]; UISe ...