2013-10-14 49 views
1

我創建了2個表。一張桌子有4個字段。一個獨特的名字,一個日期和3位數字。第二個表包含相同的字段,但記錄合併函數的輸出。因此有一個更新或插入功能發生的日期。我想要做的是檢索兩天之間的差異或者兩天的總和來計算一天中該值的變化量。合併函數只在值更改或需要插入新值時更新。SQL隨時間變化查詢

到目前爲止,我有這個

select sum(Change_Table_1.Disk_Space) as total, 
Change_Table_1.Date_Updated 

from VM_Info 
left join Change_Table_1 

on VM_Info.VM_Unique = Change_Table_1.VM_Unique 
where VM_Info.Agency = 'test' 
group by Change_Table_1.Date_Updated 

但這只是返回天更新總量的總和,而不是兩天之差。對這個問題的一個答案是將所有新記錄添加到表中,但這會包含一些重複項。所以在我的腦海中,我希望它做的是循環當天的數字,然後在第二天循環,但也包括所有未更新的值。對不起,如果我沒有解釋得很好。所以我想要實現的是隨着時間的推移總體上發生一些變化。如果它的設計很差,我也可以接受。

任何幫助,非常感謝。

也許這會解釋得更好。如果數值沒有改變,請告訴我第1天的總數,如果它發生了變化,請告訴我第2天的相同數值。等等......

好的,以便進一步闡述。

的Change_Table看起來像

vm date created action value_Field1 value_field_2 Disk_Space 


abc 14/10/2013 insert 5 5 30 

def 14/10/2013 insert 5 5 75 

abc 15/10/2013 update 5 5 75 

所以出來把我要的是第14屆總的最後一列是105。15日美國廣播公司已經從30改爲75,但不是招高清「T改變,但仍NEDS被包括給予150

所以輸出看起來像

date  disk_Space 

14/10/2013 105 

15/10/2013 150 
+0

這就是所謂的滾動總值或滾動差值。 「def」在15日不存在,這意味着沒有變化,因此查詢應該包括以前的值。最好的方法是產生缺失的行,因爲它們存在。您將需要每個值的新列RunningTotal。並且遞歸CTE是該計算的途徑。一旦你運行任何給定日期的總價值,那麼它只是任何兩個日期的簡單加法或減法。試一下,如果需要的話會提供CTE查詢。休息很簡單,所以你可以做到。 –

+0

謝謝大家的幫助。我已決定採用跑臺總表,並以1,7,14,28天的週期進行工作。這個項目的主要想法是得到一個......你有x增長,然後每增加一個變化需要收費。將閱讀遞歸CTE和回來,如果需要... – TXL

回答

0

這有幫助嗎?如果不是,你能提供幾行樣本數據,並且有一個期望結果的例子嗎?

select 
    (VM_Info.Disk_Space - Change_Table_1.Disk_Space) as DiskSpaceChange, 
    Change_Table_1.Date_Updated 
from 
    VM_Info 
    left join Change_Table_1 on VM_Info.VM_Unique = Change_Table_1.VM_Unique and VM_Info.Date = Change_Table_1.Date_Updated 
where 
    VM_Info.Agency = 'test' 
+0

謝謝Nicholai。它不是我想要的。已經添加了我之後的例子。 VM_info表不包含任何值,只能用於在變化表中包含where子句。 – TXL

+0

感謝您提供樣本記錄和結果。正如Anup所評論的,如果您爲不包含更改的日期填充行,則執行計算會更容易。然後,您可以使用此處的一個示例來獲取每日更改:http://www.sqlperformance.com/2012/07/t-sql-queries/running-totals – Nicholai