-1

我有一张包含以下数据的表格..

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。

4

2 回答 2

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
)

看到这个 SQLFiddle

于 2012-10-27T10:19:14.787 回答
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 作为派生表,然后在查询中使用 SELECT TOP(1)WITH TIES来显示所有具有相同 (MAX) 数量的表。

向 SQL Server 显示日期时,请尝试始终使用格式 YYYYMMDD 以确保稳健性。

于 2012-10-27T10:39:48.893 回答