我有以下表:
計數器值限制爲某個值,然後復位至零
情況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
,Time
和Value
。下面是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當然。
真的很感謝。非常感謝。
case2的期望結果是什麼? – niyou 2014-09-24 08:57:59
它應該與案例1相同的結果。 – Haminteu 2014-09-24 10:20:55
那麼你的規則是:如果值= 0,那麼結果= 1,000 – niyou 2014-09-24 10:22:39