mysql存储过程问题

时间:2008-11-25 18:02:52

标签: mysql

我有一张包含信用卡和借记卡的表格。

我需要从中获得最高的平衡,我认为存储过程就是这样做的,但我不知道如何。

我需要从第一行开始,添加借记,减去积分并存储值A.

第二行是A +借方贷方= B; A = max(A,B) 重复最后一步直到结束。

请记住,我正在寻找最高的EVER,而不是当前的 总和(借方信用)

4 个答案:

答案 0 :(得分:1)

在我看来,您希望运行总计为A+credit-debit,但如果需要,请将其切换。

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

编辑:回复您关于从此处形成存储函数的评论...与存储过程不同,存储函数必须返回一个值,因此它们不能包含SELECT查询,除非查询将其结果存储在变量中。这意味着必须保证查询具有单值结果。下面是我开始工作的一个函数,因为在这种情况下你只需要@high的MAX值:

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$$

答案 1 :(得分:0)

实际上,我认为我会变聪明并使其成为一种功能,因为我只想要一个值...

DELIMITER $$

DROP FUNCTION如果存在cchigh_bal $$

创建功能cchigh_bal()     返回DECIMAL

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 ;

但那给了我错误“ 不允许从函数“我不理解,因为我只想要单个值。”返回结果集。

答案 2 :(得分:0)

用户定义的函数只是嵌入在SQL语句中的内容。它们在每一行的上下文中操作(例如40行,该函数执行40次)。如果你想要一个集合(多行)的聚合,你可以使用一个带有聚合函数的SQL语句(例如MAX(columname))。并返回一个“结果集”,恰好是一行,只有一个值。

答案 3 :(得分:-1)

select max(debit-credit) from yourtable

工作?

尝试测试它。

相关问题