2014-09-24 36 views
-1

我有以下表:
計數器值限制爲某個值,然後復位至零

情況1:

Date  Time Value Prev_Value Result1 PurposeResult 
6/1/2014 0:00 80,000   
6/1/2014 1:00 82,000 80,000  2,000  2,000 
6/1/2014 2:00 83,000 82,000  1,000  1,000 
6/1/2014 3:00 84,000 83,000  1,000  1,000 
6/1/2014 4:00 85,000 84,000  1,000  1,000 
6/1/2014 5:00 86,000 85,000  1,000  1,000 
6/1/2014 6:00 87,000 86,000  1,000  1,000 
6/1/2014 7:00 88,000 87,000  1,000  1,000 
6/1/2014 8:00 89,000 88,000  1,000  1,000 
6/1/2014 9:00 90,000 89,000  1,000  1,000 
6/1/2014 10:00 91,000 90,000  1,000  1,000 
6/1/2014 11:00 92,000 91,000  1,000  1,000 
6/1/2014 12:00 93,000 92,000  1,000  1,000 
6/1/2014 13:00 94,000 93,000  1,000  1,000 
6/1/2014 14:00 95,000 94,000  1,000  1,000 
6/1/2014 15:00 96,000 95,000  1,000  1,000 
6/1/2014 16:00 97,000 96,000  1,000  1,000 
6/1/2014 17:00 98,000 97,000  1,000  1,000 
6/1/2014 18:00 99,000 98,000  1,000  1,000 
6/1/2014 19:00 0  99,000  -99,000 1,000 
6/1/2014 20:00 1,000 0    1,000  1,000 
6/1/2014 21:00 2,000 1,000   1,000  1,000 
6/1/2014 22:00 3,000 2,000   1,000  1,000 

CASE 2:

Date  Time Value Prev_Value Result1 
    6/1/2014 0:00 80,000   
    6/1/2014 1:00 82,000 80,000  2,000  
    6/1/2014 2:00 83,000 82,000  1,000  
    6/1/2014 3:00 84,000 83,000  1,000  
    6/1/2014 4:00 85,000 84,000  1,000  
    6/1/2014 5:00 86,000 85,000  1,000  
    6/1/2014 6:00 87,000 86,000  1,000  
    6/1/2014 7:00 88,000 87,000  1,000  
    6/1/2014 8:00 89,000 88,000  1,000  
    6/1/2014 9:00 0  89,000  -89,000 
    6/1/2014 10:00 1,000 0    1,000  
    6/1/2014 11:00 2,000 1,000   1,000 
    6/1/2014 12:00 3,000 2,000   1,000 
    6/1/2014 13:00 4,000 3,000   1,000 
    6/1/2014 14:00 5,000 4,000   1,000 
    6/1/2014 15:00 6,000 5,000   1,000 
    6/1/2014 16:00 7,000 6,000   1,000 
    6/1/2014 17:00 8,000 7,000   1,000 
    6/1/2014 18:00 9,000 8,000   1,000   
    6/1/2014 19:00 10,000 9,000   1,000   
    6/1/2014 20:00 11,000 10,000  1,000   
    6/1/2014 21:00 12,000 11,000  1,000   
    6/1/2014 22:00 13,000 12,000  1,000 

解釋爲例1:
Result1來自,當前值減去prev_value。
該值實際上是一個計數器值。這僅限於99,999。所以如果只使用簡單的減法。它會導致錯誤。如果您在19:00時檢查它,Result1不應該減去。然後我在excel上試過這個案例。然後,我用這個公式:

=IF((Value - Prev_Value < 0), (100000 + Value) - Prev_Value, Value - Prev_Value) 

我把上面的公式上PurposeResult場。所以案例1已經解決了。這是正常計數器,直到達到極限。

現在,說明案例2:
與案例1相同,但由於某種原因,該值未達到極限。例如,在9點鐘..它重置爲零。這意味着,我上面的公式不起作用。

僅供參考,表格僅包含Date,TimeValue。下面是T-SQL的樣本選擇上一個紀錄,並獲得簡單的結果(當前值中減去prev_value)

WITH cte AS (
    SELECT groupid, odate, otime, ovalue, 
    ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY odate, otime) rn 
    FROM table1 
) 
SELECT a.groupid, a.odate, a.otime, a.ovalue, b.ovalue Prev_oValue, 
     a.ovalue-b.ovalue oResult 
FROM cte a 
LEFT JOIN cte b ON a.groupid = b.groupid AND a.rn = b.rn + 1 
ORDER BY a.groupid, a.odate, a.otime 

所以現在的問題是,我怎麼能解決這個問題? Excel和SQL當然。

真的很感謝。非常感謝。

+0

case2的期望結果是什麼? – niyou 2014-09-24 08:57:59

+0

它應該與案例1相同的結果。 – Haminteu 2014-09-24 10:20:55

+0

那麼你的規則是:如果值= 0,那麼結果= 1,000 – niyou 2014-09-24 10:22:39

回答

0

我認爲你有一個5位數的計數器,它會返回顯示0,其數值爲100,000或其倍數。由於您的數據是有序的,相對於前面的讀數計數值的下降將指示計數器已經跳閘。請試試,如果Date是A1,在F3和向下複製到西裝:

=IF(C3>C2,C3-C2,C3-C2+100000) 

這僅使用值ColumnC到,可能的話,避免ColumnD需要這樣的數據應該是連續的。

請注意,這種計數器的性質使得從一次讀數到下一次讀數的「消耗」101,000與同一時間間隔的「消耗」僅有1,000次不同。

+0

Case1在19:00有1000,而在11,000以上,但是因爲一個步驟從99,000到1,000,對於Case2 89,000到1,000我可以' t看到「與案例1的結果相同」。 – pnuts 2014-09-24 10:46:25

+0

我沒有得到你。你可以把它放在桌子上的答案上嗎?? – Haminteu 2014-09-24 14:27:14