-1

次のデータを含む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

私のテーブルから、2012 年 10 月 10 日から 2012 年 12 月 10 日までの日付の間の最大合計額の結果が必要です。上記のデータは次のようになります。

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

このクエリはテーブルを 1 回だけ通過し、かなり最適化されています。

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 に答える