Sql 根据每个项目的最新交易日期选择数据

Sql 根据每个项目的最新交易日期选择数据,sql,sql-server,database,Sql,Sql Server,Database,我有一个查询,我希望它列出所有最新交易的价格为每个股票项目。我曾尝试使用MAX()列出每个项目的所有最新交易,但不包括价格,而且有效,但当我包括价格时,该方法将不起作用 这是我的问题 SELECT MAX(DocDate) AS DocDate, StockCode, Price FROM StockPurchasePriceHistory spph INNER JOIN Stocks s ON spph.Stock = s.Id GROUP BY StockCode, Price ORDER

我有一个查询,我希望它列出所有最新交易的价格为每个股票项目。我曾尝试使用
MAX()
列出每个项目的所有最新交易,但不包括价格,而且有效,但当我包括价格时,该方法将不起作用

这是我的问题

SELECT MAX(DocDate) AS DocDate, StockCode, Price
FROM StockPurchasePriceHistory spph
INNER JOIN Stocks s
ON spph.Stock = s.Id
GROUP BY StockCode, Price
ORDER BY StockCode ASC
输出

试试这个:

SELECT MAX(DocDate) AS DocDate, StockCode, sum(Price) as Price
FROM StockPurchasePriceHistory spph
INNER JOIN Stocks s
ON spph.Stock = s.Id
GROUP BY StockCode
ORDER BY StockCode ASC
使用行号

select * from (SELECT row_number()over(partition by StockCode order by DocDate desc) rn
 , StockCode, Price
FROM StockPurchasePriceHistory spph
INNER JOIN Stocks s
ON spph.Stock = s.Id
) a where a.rn=1

这是一个使用
应用
的好地方:

SELECT spph.DocDate, s.StockCode, spph.Price
FROM Stocks s CROSS APPLY
     (SELECT TOP (1) spph.*
      FROM StockPurchasePriceHistory spph
      WHERE spph.Stock = s.Id
      ORDER BY spph.DocDate DESC
     ) spph;

StockPurchasePriceHistory(Stock,DocDate desc)
上有一个索引,我希望它比使用窗口函数的备选方案快一点,大约和相关子查询一样快。

我不想求和价格。我只想知道那个特定日期的价格。有什么错误?价格列在哪个表中?我想得到的是每个项目的最新交易价格。例如,如果您在图像上看到,
ACS-000005
最新交易是
2017-10-16
,价格是
55.00
。它应该只显示该行,而不是仅仅因为同一项目的价格不同而将其相乘。