using System; using System.Data.Sql; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.IO; [Serializable] [SqlUserDefinedAggregate(Format.UserDefined, IsInvariantToNulls = true, IsInvariantToDuplicates = false, IsInvariantToOrder = false, MaxByteSize = 8000)] public struct GeomKeskmine:IBinarySerialize{ double korrutuspuhver; int loendur; public void Init(){ korrutuspuhver=1; loendur=0; } public void Accumulate(SqlDouble vaartus){ korrutuspuhver*=(double)vaartus; loendur++; } public void Merge(GeomKeskmine olemasolev){ korrutuspuhver*=olemasolev.korrutuspuhver; loendur+=olemasolev.loendur; } public SqlDouble Terminate(){ return (SqlDouble)Math.Pow(korrutuspuhver, 1.0/loendur); } public void Read(BinaryReader reader){ korrutuspuhver=reader.ReadDouble(); loendur=reader.ReadInt32(); } public void Write(BinaryWriter writer){ writer.Write(korrutuspuhver); writer.Write(loendur); } } /* CREATE ASSEMBLY GeomKeskmine FROM 'D:\kodu\0704\GeomKeskmine.dll' CREATE AGGREGATE GeomKeskmine(@vaartus FLOAT) RETURNS FLOAT EXTERNAL NAME GeomKeskmine.GeomKeskmine SELECT dbo.GeomKeskmine(pikkus) FROM lapsed 159,37035076912 SELECT dbo.GeomKeskmine(pikkus), synniaasta FROM lapsed GROUP BY synniaasta 164 1995 158,590616482209 1996 158,632485830463 1997 CREATE TABLE kyljed(pikkus int) insert into kyljed values(4) insert into kyljed values(9) select dbo.GeomKeskmine(pikkus) from kyljed 6 select dbo.GeomKeskmine(pikkus) from kyljed where pikkus=4 4 select dbo.GeomKeskmine(pikkus) from kyljed where pikkus=5 1 */