2013-03-13 57 views
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 .. |請將.Name | .totalsales

55 | .milk .... | 0.1000

24 | .candy |。0.800

67 | .juice ... | 0.500

現在我想檢索包含這些項目中每一個的最後一個銷售的第四列,如向每個項目查詢「MAX saledate」。我如何實現這一目標?

編輯:添加MAX(s.saledate)沒有幫助。它檢索像2012年1月1日到所有行的日期,但如果我單獨查詢MAX(s.saledate)上面的每個條目,它會返回正確的日期...我的問題是,我怎麼能添加列MAX (s.saledate)爲每個產品,使用相同的查詢,顯示3暢銷書。

+1

爲什麼MAX(saledate)不能正常工作? – samjudson 2013-03-13 17:04:01

+0

我不知道如何在我的代碼上實現它。你可以幫幫我嗎? – 2013-03-13 17:05:29

+0

就像一個SUM,除了MAX MAX(s.saledate) – samjudson 2013-03-13 17:06:27

回答

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 
+0

真的嗎?是嗎?我沒有嘗試過這種微不足道的事情。當我明天有機會訪問我的電腦時,我會試一試。謝謝! – 2013-03-13 17:08:10

+0

剛剛嘗試過,並沒有工作!它會檢索所有產品的相同日期,當它應該是每個產品特定的時候(請閱讀我的編輯) – 2013-03-14 12:16:09

+0

我很確定查詢將返回每個產品的最新銷售日期**。如果你認爲它不行,看看你是否可以在sqlfiddle.com上重現一個例子。 – Andomar 2013-03-14 18:48:59

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 
0

添加MAX(saledate)您exisitng查詢。

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 
相關問題