最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用計算列實現(xiàn)移動加權(quán)平均算法

 更新時間:2009年09月12日 22:09:52   作者:  
昨天有人讓我?guī)兔憘€算移動加權(quán)平均的SQL語句,我想了半天終于寫出來正確的了?,F(xiàn)在發(fā)出來供大家參考、討論。
復(fù)制代碼 代碼如下:

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 數(shù)量
--pri 單價
insert tb
select 0,'2009-1-1', '進(jìn)貨', 10, 100 union all
select 1,'2009-1-1', '進(jìn)貨', 50, 120 union all
select 2,'2009-1-2', '出貨', 30, 150 union all
select 3,'2009-1-3', '進(jìn)貨', 40, 130 union all
select 4,'2009-1-3', '出貨', 25, 160
GO
-- 我要算成本價,按移動加權(quán)平均

/*
1進(jìn)貨以后的成本價c1=(10*100+50*120)/(10+50)
2出貨以后的成本價c2=((10+50)*c1-30*c1)/((10+50)-30)=C2
--也就是說出貨的時候價格不變
3進(jìn)貨以后的成本價c3=(((10+50)-30)*c2+40*130)/((10+50)-30+40)
--也就是說進(jìn)貨的時候單價更新為(當(dāng)前庫存的總價值+庫總價值)/入庫后總數(shù)量


以此類推...
*/

--想了半天,覺得只能用循環(huán)、遞歸、游標(biāo)實現(xiàn),因為出庫時的價格是根據(jù)之前的記錄算出來的。
--也許有經(jīng)典的算法,誰知道的麻煩教教我或者發(fā)個鏈接。

--這個FUNCTION就是變相實現(xiàn)遞歸的
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 '進(jìn)貨' 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 進(jìn)貨 10 100 100
1 2009-01-01 00:00:00.000 進(jìn)貨 50 120 116.666666666667
2 2009-01-02 00:00:00.000 出貨 30 150 116.666667
3 2009-01-03 00:00:00.000 進(jìn)貨 40 130 124.285714428571
4 2009-01-03 00:00:00.000 出貨 25 160 124.285714
*/

這個寫法的不完善處在于它是根據(jù)ID和日期對記錄進(jìn)行排序的,對于同一天的出入庫情況沒有處理。實際運用中可以根據(jù)CREATEDATE等時間標(biāo)志性字段來進(jìn)行排序。
--------------------------------------------------------------------------------

第一次寫技術(shù)性博客,希望這是一個好的開始,歡迎大家對我的算法進(jìn)行指正^_^

相關(guān)文章

  • 數(shù)據(jù)庫學(xué)習(xí)建議之提高數(shù)據(jù)庫速度的十條建議

    數(shù)據(jù)庫學(xué)習(xí)建議之提高數(shù)據(jù)庫速度的十條建議

    很多網(wǎng)站的重要信息都是保存在數(shù)據(jù)庫中,用戶通過提交訪問數(shù)據(jù)庫來獲取用戶信息。如果數(shù)據(jù)庫速度非常的快,有助于節(jié)省服務(wù)器的資源,那么如何優(yōu)化數(shù)據(jù)庫的速度呢,下面通過此篇文章一起學(xué)習(xí)數(shù)據(jù)庫學(xué)習(xí)建議之提高數(shù)據(jù)庫速度的十條建議
    2015-11-11
  • 大數(shù)據(jù)開發(fā)phoenix連接hbase流程詳解

    大數(shù)據(jù)開發(fā)phoenix連接hbase流程詳解

    HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,該技術(shù)來源于?Fay?Chang?所撰寫的Google論文“Bigtable:一個結(jié)構(gòu)化數(shù)據(jù)的分布式存儲系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)(File?System)所提供的分布式數(shù)據(jù)存儲一樣,HBase在Hadoop之上提供了類似于Bigtable的能力
    2022-11-11
  • 梧桐數(shù)據(jù)庫與`mysql`及`oracle`關(guān)于交換服務(wù)器編號的`SQL`寫法分析(推薦)

    梧桐數(shù)據(jù)庫與`mysql`及`oracle`關(guān)于交換服務(wù)器編號的`SQL`寫法分析(推薦)

    本文介紹了如何通過SQL查詢實現(xiàn)服務(wù)器編號的交換操作,以優(yōu)化數(shù)據(jù)中心內(nèi)部服務(wù)器的布局,文章說明了不同數(shù)據(jù)庫(如梧桐數(shù)據(jù)庫、MySQL和Oracle)的建表語句、數(shù)據(jù)插入以及SQL實現(xiàn)思路,通過具體的SQL查詢,文章展示了如何在不同數(shù)據(jù)庫中交換服務(wù)器編號,并解釋了每個部分的功能
    2024-11-11
  • 數(shù)據(jù)庫設(shè)計技巧奉送了

    數(shù)據(jù)庫設(shè)計技巧奉送了

    數(shù)據(jù)庫設(shè)計技巧奉送了...
    2007-03-03
  • 解決MongoVUE的Collections數(shù)據(jù)不顯示的問題

    解決MongoVUE的Collections數(shù)據(jù)不顯示的問題

    這篇文章主要介紹了MongoVUE的Collections數(shù)據(jù)不顯示的解決方法 ,需要的朋友可以參考下
    2017-05-05
  • Navicat?Premium12進(jìn)行數(shù)據(jù)庫定期自動備份的方法步驟

    Navicat?Premium12進(jìn)行數(shù)據(jù)庫定期自動備份的方法步驟

    本文主要介紹了Navicat?Premium?12進(jìn)行數(shù)據(jù)庫定期自動備份,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SQLServer與Oracle常用函數(shù)實例對比匯總

    SQLServer與Oracle常用函數(shù)實例對比匯總

    這篇文章主要介紹了SQLServer與Oracle常用函數(shù)對比,需要的朋友可以參考下
    2014-06-06
  • 通過navicat導(dǎo)入sql文件的操作方法

    通過navicat導(dǎo)入sql文件的操作方法

    在很多項目當(dāng)中都有sql文件導(dǎo)入到MySQL數(shù)據(jù)庫的需要,因為有sql數(shù)據(jù)庫文件,這個項目才能正常運行起來,那么現(xiàn)在就來學(xué)習(xí)一下怎么導(dǎo)入sql文件到navicat里面吧,需要的朋友可以參考下
    2024-03-03
  • Python使用RethinkDB總結(jié)

    Python使用RethinkDB總結(jié)

    最近一個項目要用到文檔數(shù)據(jù)庫,順便關(guān)注了一下 NoSQL 方面的消息。當(dāng)前幾個比較流行的文檔數(shù)據(jù)庫引擎有 MongoDB, CouchDB, OrientDB 等,朋友推薦的是 MongoDB 和 RethinkDB
    2014-03-03
  • 數(shù)據(jù)庫觸發(fā)器(Trigger)的一點使用心得

    數(shù)據(jù)庫觸發(fā)器(Trigger)的一點使用心得

    最近了解了一下數(shù)據(jù)庫觸發(fā)器,并做一點實際的應(yīng)用,在翻看其概念的時候,還是本著從理解的角度來學(xué)習(xí)的,但是,到了實際的應(yīng)用場景中,還是有一些特別注意的地方的,下面是自己在應(yīng)用中的幾點體會
    2009-07-07

最新評論

天等县| 洛川县| 扎赉特旗| 保山市| 敦煌市| 荆州市| 景宁| 民县| 汕尾市| 顺昌县| 江西省| 额尔古纳市| 杭锦旗| 云梦县| 南昌县| 略阳县| 徐汇区| 凤山市| 南皮县| 绥江县| 吴忠市| 密云县| 南安市| 苗栗市| 新巴尔虎右旗| 九台市| 阳高县| 湾仔区| 沈阳市| 北安市| 沁阳市| 定结县| 正宁县| 汤原县| 电白县| 文昌市| 米易县| 阳江市| 无为县| 永嘉县| 梅河口市|