性能调优获得Max Value的详细信息

问题描述 投票:0回答:1

我有一种情况,我需要获取FromCountry和ToCountry的组合的最大日期记录的FXRate。

    FromCountry    ToCountry      FXRate         FXDate
   --------------------------------------------------------
    A               B             1.14           1/1/2019
    A               B             1.13           2/1/2019
    A               B             1.12           3/1/2019
    A               B             1.11           4/1/2019 -- Expected Record for 'A' and 'B'
    c               D             1.16           1/1/2019
    c               D             1.17           2/1/2019
    c               D             1.18           3/1/2019
    c               D             1.19           4/1/2019 -- Expected Record for 'C' and 'D'

问题是视图'FXView'具有许多记录,而我目前的方法看起来像这样

SELECT
       fx.FromCountry
     , fx.ToCountry
     , fx.FXDate
     , fx.FXRate
FROM
(
SELECT
        FromCountry
      , Tocountry
      , Max(FXDate) as MaxFXDate 
FROM FXView
GROUP BY 
        FromCountry
      , Tocountry
)result
INNER JOIN FXView fx
   ON   result.FromCountry = fx.FromCountry
   AND  result.ToCountry   = fx.ToCountry
   AND  result.MaxFXDate   = fx.FXDate  

我也尝试过使用Max窗口函数,然后获得它的“区别”,但这也需要时间。

是否有更好的解决方案来解决此性能问题?

注意:此视图中没有任何自然键。

sql-server max query-performance
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.