2013-03-13 58 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 
相关问题