Установить совокупное значение при переполнении Int16 - PullRequest
2 голосов
/ 06 января 2012

У меня есть кумулятивные входные значения, которые начинают жизнь как мелкие буквы.
Я читаю эти значения из базы данных Access и собираю их в базу данных MySQL.

Теперь я столкнулся с входными значениями типа smallint, которые являются кумулятивными, поэтому всегда увеличиваются.

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

Я обрабатываю эти значения, вставляя необработанные данные в таблицу черной дыры, и в триггере к черной дыре я обновляю данные, прежде чем вставить их в фактическую таблицу.

Я знаю, как сохранить предыдущий ввод и вывод или, если его нет, как выбрать самое последнее (и самое высокое) вставленное значение.
Но какой самый простой / быстрый способ справиться с переполнением, поэтому я получаю правильный вывод.

1 Ответ

0 голосов
/ 23 января 2012

Если у вас есть таблица с именем 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 для большого количества данных). Это не больно, а память дешева в наши дни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...