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
。它应该只显示该行,而不是仅仅因为同一项目的价格不同而将其相乘。