2008-11-25 173 views
1

我有一张信用卡和借记栏的表。mysql存储过程问题

我需要得到最高的平衡,我认为存储过程是这样做的方式,但我不知道如何。

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

第二行是A +借记信用= B; A = max(A,B) 重复上一步直到结束。

还记得,我在寻找有史以来最高,而不是当前,这也只是 和(或借记信用)

回答

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

这样做的工作,但我有麻烦,使其成为一个程序,见下文。 – bbutle01 2008-11-25 21:22:35

-1

select max(debit-credit) from yourtable 

工作?

尝试测试它。

+0

不,这一切都是给我有史以来最高的单次收费,它没有考虑收费后的余额是多少。 – bbutle01 2008-11-25 20:49:49

0

其实,我以为我会很聪明,并使它成为一个功能,因为我只想要一个值作为结果......

DELIMITER $$

DROP FUNCTION IF EXISTS cchigh_bal $$

CREATE FUNCTION cchigh_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

看到我上面编辑的回应。 – 2008-11-25 22:15:11

0

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