【问题标题】:Counter Value limit to some value then reset to zero计数器值限制为某个值,然后重置为零
【发布时间】:2014-09-24 08:28:43
【问题描述】:

我有下表:

案例 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

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

仅供参考,该表仅包含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。

对此非常感激。非常感谢。

【问题讨论】:

  • case2 的期望结果是什么?
  • 应该和案例一的结果一样
  • 那么你的规则是:如果 value = 0 then result = 1,000
  • 您希望 case2 在 9:00 得到什么结果?
  • @niyou,应该是0,10:00应该是1000

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 我没听懂你。你能把它放在你的答案上吗..?
猜你喜欢
  • 2018-10-07
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多