0

スーパーマーケットでベストセラーを 3 つ選びたいとします。これを行うには、各販売を追加して、各製品の合計を取得する必要があります。

SELECT TOP(3) *
FROM
(
   SELECT
   SUM(s.individual_sale) AS totalsales,
   p.productID AS ID,
   p.productName AS Name

   FROM
   sales s,
   products p

   WHERE
   1=1
   AND p.productID = s.productID

   GROUP BY
   p.productID,
   p.productName
   ) AS top_sellers

ORDER BY
top_sellers.totalsales DESC

次に、次のようなものが返されます。

ID..|.名前.|.totalsales

55.|.ミルク....|.1000

24.|.キャンディー.|.800

67.|.ジュース...|.500

ここで、「MAX saledate」を各アイテムにクエリするように、これらの各アイテムの最後の販売を含む 4 番目の列を取得したいと考えています。どうすればそれを達成できますか?

編集: MAX(s.saledate) を追加しても役に立ちません。2012 年 1 月 1 日のような日付をすべての行に取得しますが、上記のテーブルのエントリごとに個別に MAX(s.saledate) をクエリすると、正しい日付が返されます...私の質問は、列 MAX を追加するにはどうすればよいですか? 3 つのベストセラーを表示する同じクエリを使用して、各製品の (s.saledate)。

4

3 に答える 3

2

クエリに追加できmax(s.saledate)ます。サブクエリは必要ありません。構文t1 join t2 on <predicate>は よりもはるかに読みやすいと考えられていますfrom t1, t2 where <predicate>

select  top 3 sum(s.individual_sale) as totalsales
,       p.productID as ID,
,       p.productName as Name
,       max(s.saledate) as MaxSaleDate
from    sales s
join    products p
on      p.productID = s.productID
group by
        p.productID
,       p.productName
order by
        sum(s.individual_sale) desc
于 2013-03-13T17:05:00.710 に答える
0
SELECT TOP(3) *
FROM
(
   SELECT
   SUM(s.individual_sale) AS totalsales,
   p.productID AS ID,
   p.productName AS Name, 
   MAX(s.saledate) as MaxSaleDate

   FROM
   sales s,
   products p

   WHERE
   1=1
   AND p.productID = s.productID

   GROUP BY
   p.productID,
   p.productName
   ) AS top_sellers

ORDER BY
top_sellers.totalsales DESC
于 2013-03-13T17:07:01.003 に答える
0

MAX(saledate)既存のクエリに追加します。

SELECT TOP(3) *
FROM
(
   SELECT
   SUM(s.individual_sale) AS totalsales,
   p.productID AS ID,
   p.productName AS Name,
   MAX(saleDate)

   FROM
   sales s,
   products p

   WHERE
   1=1
   AND p.productID = s.productID

   GROUP BY
   p.productID,
   p.productName
) AS top_sellers

ORDER BY
top_sellers.totalsales DESC
于 2013-03-13T17:07:41.667 に答える