繁体   English   中英

选择所有记录的最大值

[英]select a max for all records

嗨,鉴于下面的原始表格,您如何编写查询以获得最大价格及其日期,就像下面的结果一样。 这是在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    

我建议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也会起作用。

你可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM