我有一张包含以下数据的表格。
saleId amount date
-------------------------
1 2000 10/10/2012
2 3000 12/10/2012
3 2000 11/12/2012
2 3000 12/10/2012
1 4000 11/10/2012
4 6000 10/10/2012
从我的表中我想要的结果是在10/10/2012和12/10/2012之间的最大金额,对于上面的数据将是:
saleId amount
---------------
1 6000
2 6000
4 6000
这里6000是总和的最大值(按saleId)所以我想要ID 1,2和4。
答案 0 :(得分:4)
你必须使用这样的子查询:
SELECT saleId , SUM(amount) AS Amount
FROM Table1
GROUP BY saleId
HAVING SUM(amount) =
(
SELECT MAX(AMOUNT) FROM
(
SELECT SUM(amount) AS AMOUNT FROM Table1
WHERE date BETWEEN '10/10/2012' AND '12/10/2012'
GROUP BY saleId
) AS A
)
答案 1 :(得分:2)
此查询仅在表格中进行一次并且相当优化。
select top(1) with ties saleid, amount
from (
select saleid, sum(amount) amount
from tbl
where date between '20121010' and '20121210'
group by saleid
) x
order by amount desc;
您可以使用WHERE子句作为派生表生成SUM,然后使用WITH TIES
在查询中选择SELECT TOP(1)以显示具有相同(MAX)数量的所有子句。
向SQL Server提供日期时,请尝试始终使用格式YYYYMMDD来提高稳健性。