我有一张信用卡和借记栏的表。mysql存储过程问题
我需要得到最高的平衡,我认为存储过程是这样做的方式,但我不知道如何。
我需要从第一行开始,添加借记减去学分并存储该值A.
第二行是A +借记信用= B; A = max(A,B) 重复上一步直到结束。
还记得,我在寻找有史以来最高,而不是当前,这也只是 和(或借记信用)
我有一张信用卡和借记栏的表。mysql存储过程问题
我需要得到最高的平衡,我认为存储过程是这样做的方式,但我不知道如何。
我需要从第一行开始,添加借记减去学分并存储该值A.
第二行是A +借记信用= B; A = max(A,B) 重复上一步直到结束。
还记得,我在寻找有史以来最高,而不是当前,这也只是 和(或借记信用)
在我看来,你想运行总数为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$$
月
select max(debit-credit) from yourtable
工作?
尝试测试它。
不,这一切都是给我有史以来最高的单次收费,它没有考虑收费后的余额是多少。 – bbutle01 2008-11-25 20:49:49
其实,我以为我会很聪明,并使它成为一个功能,因为我只想要一个值作为结果......
DELIMITER $$
DROP FUNCTION IF EXISTS cc
。 high_bal
$$
CREATE FUNCTION 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 ;
但是,这给我的错误“ 不允许从函数返回的结果集”我不明白,因为我只想要一个值。
看到我上面编辑的回应。 – 2008-11-25 22:15:11
用户定义函数只是您嵌入SQL语句中的东西。它们在每一行的上下文中操作(例如40行,该函数执行40次)。如果你想要一个集合(多行)的集合,你可以使用一个带有集合函数的SQL语句(例如MAX(columname))。然后,返回一个“结果集”,它恰好是一行一个值。
这样做的工作,但我有麻烦,使其成为一个程序,见下文。 – bbutle01 2008-11-25 21:22:35