我有一張信用卡和借記欄的表。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