0

次のようなテーブルTeamRatingsがあるとします。

|---Team----|--ValuationDate--|-Rating-|

|--Saints---|---10/15/2012----|---81.1-|  
|--Broncos--|---10/15/2012----|---91.1-|  
|--Ravens---|---10/16/2012----|--101.1-|  
|--Broncos--|---10/22/2012----|---82.1-|  
|--Ravens---|---10/22/2012----|---83.1-|  
|--Saints---|---10/29/2012----|---84.1-|  
|--Broncos--|---10/28/2012----|---85.1-|
|--Ravens---|---10/29/2012----|---86.1-|

また、チームのレーティングは、チームが新しいゲームをプレイするまで変更されないままであると想定されます(新しいレコードを表します)。例:2012年10月21日付けのブロンコスの格付けは102.8と想定されています

指定された日付より前のチームの最新のゲームを表す、チームごとに1つのレコードを返す日付パラメーターを使用したクエリが必要です。例えば、

日付パラメータとして2012年10月23日を入力すると、クエリは次のようになります。

|---Team---|-ValuationDate---|-Rating-|

|--Saints--|---10/15/2012----|---81.1-|  
|--Broncos-|---10/22/2012----|---82.1-|  
|--Ravens--|---10/22/2012----|---83.1-|

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

0

次のような、より一般的なクエリを使用できます。

select Team, x.ValuationDate, Rating
from TeamRatings inner join
(
 select Team, max(ValuationDate) as ValuationDate
 from TeamRatings 
 where ValuationDate < @dateParameter
 group by Team
) x on TeamRatings.Team = x.Team and TeamRatings.ValuationDate = x.ValuationDate
于 2013-02-05T22:43:45.173 に答える
0

ROW_NUMBERMS SQL Server 2005以降では、次の機能を備えたcteを使用できます。

WITH x 
     AS (SELECT team, 
                valuationdate, 
                rating, 
                rn = Row_number() 
                       OVER( 
                         partition BY team 
                         ORDER BY valuationdate DESC) 
         FROM   teamratings 
         WHERE  valuationdate < @DateParam) 
SELECT team, 
       valuationdate, 
       rating 
FROM   x 
WHERE  rn = 1 
于 2013-02-05T22:13:41.327 に答える