表A:
資產部分 LastChanged
A11后軸承 2021/04/11
A30前軸承 2021/01/07
A54軸2020/11/19
A54前軸承2021/04/18
表B
資產 EventStart EventEnd Revs Load Temp
A54 2021-09-20 19:20。 04 20210920 20: 31:33 2993 54 189
A54 20210920 20:40: 14 20210920 20: 58:23 780 49 15520210920 21:05。 53 20210920 22: 44:21 4728 66 142
"表B "是所有資產都經歷過的負載事件的集合。
我想知道是否有可能從表A的每條記錄中運行一個SQL查詢,該查詢將聚合表B的一個計算列,使用EventStart作為過濾的列。
例如,對于資產A54的前軸承,從它最后一次被改變的日期(2021/04/18)到今天,我想從表B計算出兩件事。
-總和 of revolutions
-總和of(revolutions*load)/temp
然后我想對表A中的每個資產/零件記錄從它們各自的最后更改日期開始重復這個程序。
如果這在SQL中很難做到,我可以選擇用代碼來做,并且每隔10分鐘左右重寫一個表,但是如果這可以直接在SQL中完成,我就可以建立一個幾乎實時的API了。
非常感謝任何可能提供幫助的人。
uj5u.com熱心網友回復:
這聽起來像是一份適合OUTER APPLY的作業:
SELECT
A.資產。
A.部件。
A.LastChanged,
B.Revs,
B.RLT
FROM[/span
[Table A] As A
OUTER APPLY
(
SELECT SUM(Revs) As Revs, SUM(1. * Revs * Load / Temp) As RLT
FROM [Table B] As B
WHERE B.Asset = A.Asset
And B.EventStart >= A.LastChanged
) As B
;
( uj5u.com熱心網友回復: 我懷疑你想要兩個值的比例。
標籤:1. 只是為了避免整數除法;如果你的列型別實際上是浮點數,你可以省略它。
OUTER APPLY是一個好方法。 代碼會看起來像:SELECT A.*, B.Revs, B.Revs_Load,
B.Revs * 1.0 / B.Revs_Load as 比例
FROM TableA A OUTER APPLY
(SELECT SUM(Revs) AsRevs, SUM(Revs * Load) AsRevs_Load
FROM TableB B
WHERE B.資產 = A.資產 AND
B.EventStart >= A.LastChanged
) B;
