2012-06-07 117 views
0

我有會員必須爲會員付款。我存儲:付款日期和會員資格(他們可以支付1個月或幾個月)。按計算字段排列的MySQL組

現在我想知道哪些付款過期或即將付款。

我的邏輯是:獲得每個會員的過期日期(最後付款日期+會員資格長度),然後查看每個會員的最高價值。

這是我的查詢,但我確實想解釋我的推理,因爲您可能想要質疑該數據庫甚至數據庫的格式(但請不要要求我存儲到期日期)。

SELECT tbl.company AS company, 
     MAX(ADDDATE(paydate, INTERVAL paylength MONTH))) AS expiration, 
     tbl.id 
FROM tblPayments 
JOIN tbl ON tblPayments.comp_id = tbl.id 
GROUP BY expiration 
ORDER BY expiration ASC 

我讀過計算字段的分組可能是不可能的,但是我對MySQL的知識還不夠強,無法理解變通方法。我會很感激你可以提供任何幫助!謝謝!

+0

你是否嘗試將整個表達式放在group by子句中,而不是別名:GROUP BY MAX(ADDDATE(paydate,INTERVAL paylength MONTH)))... ...似乎我有這樣的事情,一旦別名不會工作......我還沒有測試;這只是一個想法... – keithhatfield

回答

2

您正在分組的聚合結果,這是不可能的,而不是你想要的。根據你的解釋我想你正在嘗試做這個

SELECT 
    tbl.company AS company, 
    MAX(ADDDATE(paydate, INTERVAL paylength MONTH)) AS expiration, 
    tbl.id 
FROM tblPayments 
JOIN tbl 
    ON tblPayments.comp_id = tbl.id 
GROUP BY tbl.company , tbl.id 
HAVING expiration < NOW() 
ORDER BY expiration ASC 

而且@dleiftah帶來了一個好點的,你不能總是使用別名儘管MySQL似乎讓你在一個GROUP BY而MSSQL從來不會。我忘了什麼時候...

+0

你是對的!我在錯誤的領域分組!謝謝 :) –