2013-03-01 74 views
1
+----+--------+----------+-----------+ 
| ID | Number | Reason | Timestamp | 
+----+--------+-----------+----------+ 
| 1 | 2  | Business | date  | 
| 2 | 3  | Pleasure | date  | 
+----+--------+-----------+----------+ 

我有一張如上所述的表格。我想知道如何獲得最新的記錄(按時間戳排列的表格),其中的數字列添加到特定的值。選擇總和達到一定值的排名記錄

所以在上面的例子中,如果我有一個值爲5,我想要這2個記錄(假設他們是最近的)。我想得到如下輸出字符串:

2 (Business), 3 (Pleasure) 

任何想法?

+0

是'價值'參數嗎? Number是唯一的嗎?你想要所有的組合還是隻有兩個以前的記錄? – 2013-03-01 23:40:01

+1

他們必須準確加起來嗎?或者你是否在尋找第一個加起來至少達到這個數量的組? – 2013-03-01 23:51:36

+0

@TimSchmelter值實際上來自另一個表。號碼不是唯一的。我希望以前的記錄合計值。 – Adam 2013-03-02 17:50:04

回答

3

如果您正在尋找加起來不大於X最近的記錄,那麼你需要一個累計總和。在SQL Server 2008中,這是使用處理的相關子查詢:

select t.* 
from (select t.*, 
      (select sum(number) from t t2 where t2.id <= t.id) as CumeSumValue 
     from t 
    ) t 
where CumeSumValue <= X 

我覺得>=需要多一點的邏輯。

select t.* 
from (select t.*, 
      (select sum(number) 
       from t t2 
       where t2.id <= t.id 
      ) as CumeSumValue 
     from t 
    ) t 
where CumeSumValue <= X or -- less than or equal 
     ((CumeSumValue - Number < X) and (CumeSumValue > X)) -- first that is greater than 
     CumeSumValue >= X 
1

首先,你應該得到的最新記錄

Select Max(ID) MAXID Into #t From t Group By Timestamp 

現在#T所有最新的記錄提供。您可以使用表加入以訪問所有字段:

Select t.* from t Join #t on t.ID = #t.MAXID 

如果您想過濾可以用簡單的where子句完成的事情。

相關問題