您好了下面的原始表格,您如何编写查询以获得最高价格及其日期,就像下面的结果一样。这是在sql server中。
原始表:tblstock
symbol, date, price
aapl, 2/2/2015, 115
aapl, 2/3/2015, 119.56
aapl, 2/4/2015, 116
aapl, 2/5/2015, 109
aapl, 2/6/2015, 107.56
想要的结果:
symbol, date, price, highpricedate, highprice
aapl, 2/2/2015, 115, 2/3/2015, 119.56
aapl, 2/3/2015, 119.56, 2/3/2015, 119.56
aapl, 2/4/2015, 116, 2/3/2015, 119.56
aapl, 2/5/2015, 109, 2/3/2015, 119.56
aapl, 2/6/2015, 107.56, 2/3/2015, 119.56
答案 0 :(得分:7)
我建议outer apply
:
select t.*, tmax.date as highpricedate, tmax.price as highprice
from tblstock t outer apply
(select top 1 t2.*
from tblstock t2
where t2.symbol = t.symbol
order by t2.price desc
) tmax;
实际上,cross apply
也可以正常工作。
答案 1 :(得分:2)
您可以使用Windows功能。
说明:
使用Windows功能(如果您愿意,可以使用over子句),您可以轻松获得HighPrice。
获取HighPriceDate有点棘手,但仍然相当简单。 通过使用Row_Number对每个行的分区进行排名,我们可以使用Lag函数来获取HighPriceDate。
SELECT symbol,
[date],
price,
highprice = MAX(price) OVER(PARTITION BY symbol),
HighPriceDate = LAG([date], i - 1) OVER (PARTITION BY symbol ORDER BY i)
FROM ( SELECT *,
i = ROW_NUMBER() OVER(PARTITION BY symbol ORDER BY PRICE DESC)
FROM @tblstock) AS Sub