面对溢出的Int16时设置累计值

时间:2012-01-06 11:40:52

标签: mysql overflow bit-manipulation

我有累积输入值,以小点开始生活 我从Access数据库中读取这些值,并将它们聚合到MySQL数据库中。

现在我面临着累积类型smallint的输入值,因此总是在增加。

Input            Required output
---------------------------------
0                0
10000            10000
32000            32000
-31536           34000             //overflow in the input
-11536           54000
8464             74000

我通过将原始数据插入黑洞表并在黑洞的触发器中处理这些值,然后在将数据插入实际表之前升级数据。

我知道如何存储先前的输入和输出,或者如果没有,则如何选择最新(和最高)的插入值。
但是什么是处理溢出的最简单/最快的方法,所以我得到了正确的输出。

1 个答案:

答案 0 :(得分:-1)

假设您有一个名为test的表,其主键名为id,该列名为value,那么就这样做:

SELECT
  id,
  test.value,
  (SELECT SUM(value) FROM test AS a WHERE a.id <= test.id) as output
FROM test;

这将是输出:

------------------------
| id | value  | output |
------------------------
|  1 |  10000 |  10000 |
|  2 |  32000 |  42000 |
|  3 | -31536 |  10464 |
|  4 | -11536 |  -1072 |
|  5 |  8464  |   7392 |
------------------------

希望这有帮助。

如果它不起作用,只需将您的数据转换为INT(或BIGINT以获取大量数据)。它没有伤害,而且记忆力很便宜。