2013-10-14 46 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