2010-02-11 28 views
0

我有表中,我需要選擇一個時期總數MAX(總和)。Mysql優化,多選擇單選擇

SELECT SUM(P.amount) as total FROM bank P WHERE P.ReceivedDate >= '2008-07-28' AND P.ReceivedDate <= '2008-08-31'; 

SELECT SUM(P.amount) as total FROM bank P WHERE P.ReceivedDate >= '2008-09-01' AND P.ReceivedDate <= '2008-09-28'; 

SELECT SUM(P.amount) as total FROM bank P WHERE P.ReceivedDate >= '2008-09-29' AND P.ReceivedDate <= '2008-10-26'; 

我已經運行上述查詢,並在PHP中找到最高總數。我不確定如何按此查詢分組。

我期待一個查詢將所有此查詢替換爲MAX(SUM(total))。

請幫我一把。

回答

3

你可以嘗試像

SELECT TOP 1 
     CASE 
      WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1 
      WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2 
      WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3 
     END, 
     SUM(P.amount) Total 
FROM bank p 
GROUP BY CASE 
      WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1 
      WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2 
      WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3 
     END 

HAVING CASE 
      WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1 
      WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2 
      WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3 
     END IS NOT NULL 
ORDER BY Total DESC 

或較短的版本

SELECT TOP 1 
     SUM(amount) Total 
FROM (
      SELECT CASE 
         WHEN P.ReceivedDate BETWEEN '2008-07-28' AND '2008-08-31' THEN 1 
         WHEN P.ReceivedDate BETWEEN '2008-09-01' AND '2008-09-28' THEN 2 
         WHEN P.ReceivedDate BETWEEN '2008-09-29' AND '2008-10-26' THEN 3 
        END GroupVal, 
        P.amount 
      FROM bank P 
     ) Vals 
GROUP BY Vals.GroupVal 
HAVING Vals.GroupVal IS NOT NULL 
ORDER BY Total DESC 
+0

爲什麼不之間,而不是> = <=運算符使用? – AntonioCS

+0

真的,之間會更好。 –

+0

是的,我會之間使用,謝謝你的解決方案 – itsoft3g