【发布时间】: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 点钟..它重置为零。这意味着,我上面的公式不起作用。
仅供参考,该表仅包含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 的期望结果是什么?
-
应该和案例一的结果一样
-
那么你的规则是:如果 value = 0 then result = 1,000
-
您希望 case2 在 9:00 得到什么结果?
-
@niyou,应该是0,10:00应该是1000
标签: sql excel sql-server-2008 excel-2010