我不確定這會被稱為什么,因為搜索術語“移動平均線”并沒有產生我想要做的事情......
我在 MSSQL 中有一個表,其中包含一系列天氣觀測,這些觀測是不定期進行的。
我想在 SQL 中創建一個存盤程序,它將時間作為輸入變數,然后選擇最接近的前后觀察值,并計算該輸入時間的測量值的近似值并回傳這些值。
我知道我可以創建 2 行的平均值,但是如果我輸入 07:24 的時間并且在 07:25 有一個觀察值,則測量值將比平均值更接近記錄值。

在我的腦海中,我想我知道該怎么做,但它很混亂:-
- 計算測量時間之間的差異(分鐘/整數)
- 計算測量值之間的差異(整數/浮點數)
- 劃分時間/值以給出每分鐘的測量值
- 計算最早時間和輸入變數之間的差異(分鐘/整數)
- 將每分鐘測量值乘以輸入變數差異(整數/浮點數)
- 將上述步驟中的值添加到最早的時間測量變數以生成回傳值
所以我的擔憂是:
- 這對于 SQL 來說是太高級還是太復雜了?
- 如果不是,它會是一個很長很亂的存盤程序嗎?
我不是在找人為我做這件事,我想學習,任何指示、建議、重復的帖子或示例代碼片段都會被大量接收和研究。
uj5u.com熱心網友回復:
我認為你想要做的是一個加權平均。在存盤程序或用戶定義的函式中實作這一點應該相對簡單,但顯然僅適用于數字觀察,而不適用于文本觀察。
首先,我們直接獲取指定時間前后的觀測值。讓我們稱這些為A和B。
然后,我們制定出的時間之間的秒數A,并在規定的時間(可以稱之為X)和時間之間的秒數A和B(可以稱之為Y)。
計算X / Y將給出A與指定時間之間的“接近度”百分比,并(1 - X / Y)為我們提供到 的“接近度” B。然后我們可以將這些用作加權平均值中的權重。
所以最后的計算是:
A x (X / Y) B x (1 - X / Y)
例如,如果指定的時間是 7:25,而最近的觀測值是 7:20 的 32 和 7:30 的 30,我們有以下內容:
A=32,B=30,X=10,Y=20X / Y=1 - X / Y=0.5Output=31
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340090.html
標籤:sql-server 存储过程
上一篇:按列展開資料
下一篇:基于具有相同結構的相似表更新表
