我有表格,我需要选择期间总数的MAX(SUM(总计))。
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(总计))。
请帮帮我。
答案 0 :(得分: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