2016-08-02 37 views
-1

我有一個縱向表,其中包含日期和餘額。我需要提取6個變量,包含過去6個月的每個月的餘額。這看起來好像很容易做到,但是迄今爲止我還沒有運用過案例或select中的陳述。從SQL中獲取歷史值

我的整個程序按照日期循環了我的數據。

與表看起來是這樣的:

col1 |col2 |account |date |balance |col3 |col4 
-------------------------------------------------------------- 
     |  |123456  |Jul-16 |1200  |  | 
     |  |123456  |Jun-16 |1100  |  | 
     |  |123456  |May-16 |1000  |  | 
     |  |123456  |Apr-16 |900  |  | 
     |  |123456  |Mar-16 |800  |  | 
     |  |123456  |Feb-16 |700  |  | 
     |  |123456  |Jan-16 |600  |  | 
     |  |123456  |Dec-15 |500  |  | 
     |  |123456  |Nov-15 |400  |  | 
     |  |123456  |Oct-15 |300  |  | 
     |  |123456  |Sep-15 |200  |  | 
     |  |123456  |Aug-15 |100  |  | 
     |  |234567  |Jul-16 |-500  |  | 
     |  |234567  |Jun-16 |-400  |  | 
     |  |234567  |May-16 |-600  |  | 
     |  |234567  |Apr-16 |-500  |  | 
     |  |234567  |Mar-16 |-200  |  | 
     |  |234567  |Feb-16 |-400  |  | 
     |  |345678  |Jul-16 |100  |  | 
     |  |345678  |Jun-16 |200  |  | 
     |  |345678  |May-16 |300  |  | 
     |  |345678  |Apr-16 |400  |  | 
     |  |345678  |Mar-16 |500  |  |  

我需要的變量B1-B6給我的每個帳戶的餘額在過去的6個月。

+4

請張貼表格定義,數據和預期結果。還有RDBMS供應商和版本。 – vercelli

+0

如果顯示錶格的「模式大綱」和所需輸出示例,獲得幫助會更容易。 – zulq

+0

我試過使用case語句,如果循環。數據是敏感的,所以我需要在發佈樣本之前先處理它。我會看看我能否拿出一張假示例表,但現在工作平平。 – Zephyr

回答

1

它很難說,如果這是究竟你正在尋找,但如果你正在尋找超過6個月累積每個帳戶的餘額,下面可能會有幫助。

SELECT account, SUM(balance) 
    FROM Table_1 
    WHERE date >= '2013-02-02' AND 
      date <= '2013-08-02' 
GROUP BY account 

在「GROUP BY」功能將由每個「帳戶」和where子句將返回的聚合值的日期範圍的總結所聚集的變量或SUM(balance)。您可以將其他變量添加到select語句和「GROUP BY」中。

1

儘管這基本上是每組問題前N它看起來像你一直每個月應該更容易處理有數據。

select t.* 
from 
    <T> t inner join 
    (select account, max(date) as max_date from <T> group by account) m 
     on m.account = t.account and t.date > max_date - 6 months /* pseudo-code */ 

您必須根據您的業務規則計算六個月的回溯。在月底附近可能會有一些小的複雜情況(尤其是2月份)。這僅僅是一種方法的粗略模板,可能是在您的平臺上工作。取決於假設條件,您可以對此進行優化。