计数器值限制为某个值然后重置为零

时间:2014-09-24 08:28:44

标签: sql excel sql-server-2008 excel-2010

我有下表:

案例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;时钟..它重置为零。这意味着,我上面的公式不会起作用。

仅供参考,该表仅包含DateTimeValue。下面是选择前一条记录的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。

真的很感激。非常感谢你。

1 个答案:

答案 0 :(得分:0)

我认为你有一个5位数的计数器,可以返回显示0 100,000或其倍数。由于您的数据是有序的,因此相对于前一读数的计数值的下降将指示计数器已跳闸。如果Date在A1中,请在F3中尝试并复制到适合:

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

这只使用ColumnC中的值,可能避免使用ColumnD,因此数据应该是连续的。

请注意,这样一个计数器的性质是,从一个读数到下一个读数的“消费”101,000在同一时间间隔内不能与“消费”仅1000个区分开来。