2015-06-18 30 views
0

問:SQL服務器 - 計算每個時間增量

如何,我可以只爲一個間隔時間每次(小間隔)第一個值來計算?

詳情:

我有(許多)計數器(counterId列)。 每個計數器從時間採樣時間和樣本保存在「counter_samples」表:

counter_samples表

id |counterId | value | Time    | 
1 | 1   | 100 | 2015-06-12 14:00:04 | 
2 | 2   | 57  | 2015-06-12 14:00:11 | 
3 | 1   | 100 | 2015-06-12 15:00:43 | 
4 | 2   | 59  | 2015-06-12 15:00:24 | 
5 | 1   | 104 | 2015-06-12 16:00:12 | 
6 | 2   | 63  | 2015-06-12 16:00:14 | 
7 | 1   | 110 | 2015-06-12 17:00:25 | 
8 | 2   | 70  | 2015-06-12 17:00:28 | 
9 | 1   | 120 | 2015-06-12 18:00:17 | 
10 | 2   | 80  | 2015-06-12 18:00:36 | 
11 | 1   | 130 | 2015-06-12 19:00:04 | 
12 | 2   | 90  | 2015-06-12 19:00:13 | 
13 | 1   | 170 | 2015-06-12 20:00:52 | 
14 | 2   | 95  | 2015-06-12 20:00:13 | 
15 | 1   | 190 | 2015-06-12 21:00:11 | 
16 | 2   | 99  | 2015-06-12 21:00:04 | 

正如你所看到的,隨着時間的傳遞總是更大的每一個計數器值或等於之前(等於=無在時間跨度計數)

我想是對於任何給定的時間間隔(@start_date AND @end_date)的值來查詢樣品表約持續時間(小時/天/周/月等),並獲得每持續時間區間的總計數。

例如,如果間隔是:1/1/2014 - 1/1/2015並且持續時間是月,則結果集將是12個行,代表月份i的區間和月份值中的12個月'將是月[i + 1]。值 - 月[i]。值

要計算計數我想從當前持續時間的第一條記錄中減去下一個持續時間的第一條記錄 - 對於上面的示例,如果持續時間是2小時,我想要的是(對於counterId = 1 ):

|CounterId | count | Time    | 
| 1   | 4  | 2015-06-12 14:00:00 | 
| 1   | 16  | 2015-06-12 16:00:00 | 
| 1   | 50  | 2015-06-12 18:00:00 | 

而對於counterId = 2:

|CounterId | count | Time    | 
| 2   | 6  | 2015-06-12 14:00:00 | 
| 2   | 17  | 2015-06-12 16:00:00 | 
| 2   | 15  | 2015-06-12 18:00:00 | 

(在時間20點零零分00秒以上兩個查詢通知的因爲...忽略爲22時00分00秒和沒有記錄以上)

的時候一定要改變,因爲我希望能夠GROUPBY和總和計數器相匹配的(intervalStart +持續時間* K)格式通過時間在不同的查詢,以便在上面的例子中得到:

| count | Time    | 
| 10  | 2015-06-12 14:00:00 | 
| 33  | 2015-06-12 16:00:00 | 
| 65  | 2015-06-12 18:00:00 | 

我一直有在這裏尋找&一個很好的例子,針對此問題但沒有什麼,我發現解決了它: Sql to select row from each day of a month

Select first row in each GROUP BY group?

When should I use Cross Apply over Inner Join?

謝謝!

回答

0

這個問題很久以前。無論如何,我用一種醜陋的方式解決了它。我爲每個相關時間段(日/雜草/月等)創建了一個單獨的表格,並且持續時間表將FK保存到每個區間原始數據的第一個報告 - 這樣我可以查詢知道時間間隔併爲其獲取原始值。