SQL Query Group By with date参数

时间:2013-02-05 22:10:24

标签: sql group-by

假设我有一个表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

我想要一个带有日期参数的查询,该参数将返回每个团队一个记录,重新定位该团队在指定日期之前的最新游戏。例如,

如果我输入10/23/2012作为我的日期参数,则查询应返回

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

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

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

在MS SQL Server 2005或更高版本上,您可以使用带有ROW_NUMBER功能的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 

答案 1 :(得分: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