mysql存储过程问题

mysql存储过程问题,mysql,Mysql,我有一张有信用和借记栏的桌子 我需要从中获得最高的平衡,我认为存储过程是实现这一点的方法,但我不知道如何实现 我需要从第一行开始,加上借项,减去贷项,然后存储值A 第二行为A+借贷=B;A=maxA,B 重复最后一步直到结束 记住,我要找的是有史以来最高的,而不是电流,它只是 SumDebt credit于五月 select max(debit-credit) from yourtable 工作 试着测试一下。在我看来,您希望运行总额为+贷记借方,但如果需要,可以切换它们 SET @balan

我有一张有信用和借记栏的桌子

我需要从中获得最高的平衡,我认为存储过程是实现这一点的方法,但我不知道如何实现

我需要从第一行开始,加上借项,减去贷项,然后存储值A

第二行为A+借贷=B;A=maxA,B 重复最后一步直到结束

记住,我要找的是有史以来最高的,而不是电流,它只是 SumDebt credit于五月

select max(debit-credit) from yourtable
工作


试着测试一下。

在我看来,您希望运行总额为+贷记借方,但如果需要,可以切换它们

SET @balance := 0;
SET @high := 0;
SELECT @high := GREATEST(@balance := @balance+credit-debit, @high) FROM mytable;
SELECT @high;
编辑:为了回应您关于从这个函数生成存储函数的评论。。。与存储过程不同,存储函数必须返回一个值,因此它们不能包含SELECT查询,除非查询将其结果存储在变量中。这意味着必须保证查询具有单值结果。下面是我要使用的函数,因为在这种情况下,您只需要@high的最大值:


事实上,我想我会很聪明,把它变成一个函数,因为我只想要一个值作为结果

分隔符$$

下降功能(如果存在)cc.high\U bal$$

创建函数cc.high\u 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 ;
但这给了我一个错误
不允许从我不理解的函数返回结果集,因为我只需要单个值。

用户定义函数只是嵌入到SQL语句中的东西。它们在每一行的上下文中运行,例如40行,函数执行40次。如果要从多行集合中进行聚合,可以使用包含聚合函数(例如MAXcolumname)的SQL语句。返回一个结果集,它恰好是一行一个值。

不,所有这些都给了我最高的单个电荷,它不考虑在这个电荷被做之后的平衡。这是做的,但是我很难把它变成一个过程,见下文。
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 ;