Sql 如何从子查询中为每行选择最大日期

Sql 如何从子查询中为每行选择最大日期,sql,tsql,Sql,Tsql,假设我想从超市里挑选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.produc

假设我想从超市里挑选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.|牛奶…..1000

24.|糖果| 800

67.|果汁…| 500

现在,我想检索第四列,其中包含每个项目的上次销售,比如查询每个项目的“MAX saledate”。我如何做到这一点

编辑:添加MAX(s.saledate)没有帮助。它会在所有行中检索一个日期,如2012年1月1日,但如果我分别为上表的每个条目查询MAX(s.saledate),它会返回正确的日期。。。我的问题是,如何使用显示3本畅销书的同一查询为每种产品添加MAX(s.saledate)列。

您可以在查询中添加
MAX(s.saledate)
。不需要子查询。语法
t1-join-t2-on
被认为比t1,t2-where的
可读性强得多

MAX(saledate)
添加到现有查询中


为什么MAX(saledate)不能正常工作?我不知道如何在我的代码中实现它。你能帮我吗?就像一个总数,除了一个最大值。。。马克斯(s.saledate)真的吗?是这样吗?我没试过这么琐碎的东西。等我明天有机会使用我的电脑的时候再试试。谢谢只是试了一下,但没有成功!它为所有产品检索相同的日期,而该日期应该特定于每个产品(请阅读我的编辑),我很确定查询将返回每个产品的最新销售日期。如果您认为没有,请查看是否可以在sqlfiddle.com上复制一个示例。
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
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
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