千家信息网

数据库中如何使用计算列实现移动加权平均算法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:if OBJECT_ID('tb') is no
千家信息网最后更新 2026年10月31日数据库中如何使用计算列实现移动加权平均算法

这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

代码如下:

if OBJECT_ID('tb') is not null drop table tb if OBJECT_ID('TEMP') is not null drop table TEMP if OBJECT_ID('FUN_NOWPRICE') is not null drop FUNCTION FUN_NOWPRICE if OBJECT_ID('FUN_NOWQTY') is not null drop FUNCTION FUN_NOWQTY go create table tb( id INT ,Date1 datetime ,ctype varchar(10) ,qnt float ,pri float ) --qnt 数量 --pri 单价 insert tb select 0,'2009-1-1', '进货', 10, 100 union all select 1,'2009-1-1', '进货', 50, 120 union all select 2,'2009-1-2', '出货', 30, 150 union all select 3,'2009-1-3', '进货', 40, 130 union all select 4,'2009-1-3', '出货', 25, 160 GO -- 我要算成本价,按移动加权平均 /* 1进货以后的成本价c1=(10*100+50*120)/(10+50) 2出货以后的成本价c2=((10+50)*c1-30*c1)/((10+50)-30)=C2 --也就是说出货的时候价格不变 3进货以后的成本价c3=(((10+50)-30)*c2+40*130)/((10+50)-30+40) --也就是说进货的时候单价更新为(当前库存的总价值+库总价值)/入库后总数量 以此类推... */ --想了半天,觉得只能用循环、递归、游标实现,因为出库时的价格是根据之前的记录算出来的。 --也许有经典的算法,谁知道的麻烦教教我或者发个链接。 --这个FUNCTION就是变相实现递归的 CREATE FUNCTION FUN_NOWPRICE(@ID INT) RETURNS NUMERIC(19,6) AS BEGIN RETURN (SELECT ISNULL(NOWPRICE,0) FROM (SELECT MAX(NOWPRICE) 'NOWPRICE' FROM TEMP T1 WHERE ID<@ID AND NOT EXISTS(SELECT 1 FROM TEMP WHERE ID>T1.ID AND ID<@ID)) T) END GO --这个FUNCTION是为了计算方便 CREATE FUNCTION FUN_NOWQTY(@ID INT) RETURNS NUMERIC(19,6) AS BEGIN RETURN (SELECT ISNULL(SUM(CASE CTYPE WHEN '进货' THEN QNT ELSE 0-QNT END),0) FROM TEMP WHERE ID<@ID) END GO --建一个临时表,包含原表参与运算的全部字段 create table TEMP( id INT ,Date1 datetime ,ctype varchar(10) ,qnt float ,pri float ,NOWPRICE AS CASE ctype WHEN '出货' THEN DBO.FUN_NOWPRICE(ID) ELSE (DBO.FUN_NOWPRICE(ID)*DBO.FUN_NOWQTY(ID)+QNT*PRI)/(DBO.FUN_NOWQTY(ID)+QNT) END) INSERT INTO TEMP SELECT * FROM TB ORDER BY DATE1 ASC,ID ASC SELECT * FROM TEMP /* 0 2009-01-01 00:00:00.000 进货 10 100 100 1 2009-01-01 00:00:00.000 进货 50 120 116.666666666667 2 2009-01-02 00:00:00.000 出货 30 150 116.666667 3 2009-01-03 00:00:00.000 进货 40 130 124.285714428571 4 2009-01-03 00:00:00.000 出货 25 160 124.285714 */

这个写法的不完善处在于它是根据ID和日期对记录进行排序的,对于同一天的出入库情况没有处理。实际运用中可以根据CREATEDATE等时间标志性字段来进行排序。

感谢各位的阅读!关于"数据库中如何使用计算列实现移动加权平均算法"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

成本 成本价 算法 移动 数据 数据库 也就是 也就是说 价格 内容 单价 字段 总价 总价值 数量 时候 更多 篇文章 递归 排序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网巨头反垄断金融科技 关于新基建和互联网科技 互联网与新科技 广州善班互联网科技 卫星互联网科技股票 科技与互联网的利与弊 互联网科技产品 天速互联网络科技有限公司 剑昆互联网络科技有限公司临桂 小米互联网科技园设置 以后互联网后是啥科技 河南猎农互联网科技有限公司 玉溪互联网科技怎么选 互联网媒体平台算高科技产业 华中科技大学互联网的牛人 山东有哪些互联网科技公司 互联网时代的科技公司 互联网科技实习生岗位 雨阳互联网卡科技有限公司 互联网领先科技活动 互联网科技保险 互联网与科技金融数据 互联网科技集团 无锡溥仪互联网科技有限公司 深圳国际航运科技和互联网 湖南一路畅行互联网科技 宜昌元轩互联网科技有限公司 群盈汇互联网科技有限公司 皮皮虾互联网科技有限公司 平安好医生打造互联网科技医疗
0