我有下表:
案例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
案例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 o&#39;时钟..它重置为零。这意味着,我上面的公式不会起作用。
仅供参考,该表仅包含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。
真的很感激。非常感谢你。
答案 0 :(得分:0)
我认为你有一个5位数的计数器,可以返回显示0
100,000或其倍数。由于您的数据是有序的,因此相对于前一读数的计数值的下降将指示计数器已跳闸。如果Date
在A1中,请在F3中尝试并复制到适合:
=IF(C3>C2,C3-C2,C3-C2+100000)
这只使用ColumnC中的值,可能避免使用ColumnD,因此数据应该是连续的。
请注意,这样一个计数器的性质是,从一个读数到下一个读数的“消费”101,000在同一时间间隔内不能与“消费”仅1000个区分开来。