2008-11-25 187 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))。然後,返回一個「結果集」,它恰好是一行一個值。