我有一张包含信用卡和借记卡的表格。
我需要从中获得最高的平衡,我认为存储过程就是这样做的,但我不知道如何。
我需要从第一行开始,添加借记,减去积分并存储值A.
第二行是A +借方贷方= B; A = max(A,B) 重复最后一步直到结束。
请记住,我正在寻找最高的EVER,而不是当前的 总和(借方信用)
答案 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如果存在cc
。high_bal
$$
创建功能cc
。high_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
工作?
尝试测试它。