假设我有一个表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-|
非常感谢任何帮助。谢谢!
答案 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