вопрос хранимой процедуры mysql - PullRequest
1 голос
/ 25 ноября 2008

У меня есть таблица со столбцом кредита и дебета.

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

Мне нужно начать с первой строки, добавить дебеты, вычесть кредиты и сохранить значение A.

Вторая строка - A + дебет-кредит = B; A = max (A, B) Повторите последний шаг до конца.

Помните, я ищу самый высокий КОГДА-ЛИБО, а не текущий, который был бы просто сумма (дебет-кредит)

Ответы [ 4 ]

1 голос
/ 25 ноября 2008

Мне кажется, что вы хотите, чтобы итоговая сумма составляла A+credit-debit, но переключайте их при необходимости.

SET @balance := 0;
SET @high := 0;
SELECT @high := GREATEST(@balance := @balance+credit-debit, @high) FROM mytable;
SELECT @high;

edit: В ответ на ваш комментарий о формировании хранимой функции из этого ... в отличие от хранимых процедур, хранимые функции должны возвращать одно значение, поэтому они не могут содержать запрос SELECT, если только запрос сохраняет свой результат в переменной. Это означает, что запрос должен иметь гарантированный результат с одним значением. Ниже приведена функция, которую я получил для работы, потому что в этом случае вам нужно только значение MAX @high:

CREATE FUNCTION high_bal() RETURNS DECIMAL
BEGIN
  SET @balance := 0;
  SET @high := 0;

  SELECT MAX(@high := GREATEST(@balance := @balance+debit_acc-credit_acc, @high))
  INTO @high
  FROM credit_acc where credit_used_acc=63395;

  RETURN @high;
END$$
0 голосов
/ 26 ноября 2008

Пользовательские функции - это только то, что вы встраиваете в оператор SQL. Они работают в контексте каждой отдельной строки (например, 40 строк, функция выполняется 40 раз). Если вам нужен агрегат из набора (несколько строк), используйте оператор SQL с функцией агрегата (например, MAX (columname)). И это возвращает «набор результатов», который является одной строкой с одним значением.

0 голосов
/ 26 ноября 2008

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

РАЗДЕЛИТЕЛЬ $$

ФУНКЦИЯ ОТКЛЮЧЕНИЯ, ЕСЛИ ЕСТЬ cc. high_bal $$

СОЗДАТЬ ФУНКЦИЮ cc. high_bal () ВОЗВРАЩАЕТСЯ ДЕСЯТИЧНЫЙ

BEGIN
SET @balance := 0;
SET @high := 0;
SELECT @high := GREATEST(@balance := @balance+debit_acc-credit_acc, @high) FROM credit_acc where credit_used_acc=63395;

RETURN @high;
END$$

print("code sample");

DELIMITER ;

Но это дает мне ошибку " Не разрешается возвращать набор результатов из функции "Что я не понимаю, потому что я просто хочу одно значение.

0 голосов
/ 25 ноября 2008

Май

select max(debit-credit) from yourtable

работа

Попробуйте проверить это.

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