带日期参数的SQL查询GroupBy
假设我有一张桌子,TeamRatings,看起来像这样 |--团队-|-评估日期-|-评级-| |-圣徒--2012年10月15日--81.1-| |-野马队--2012年10月15日--91.1-- |-乌鸦--10/16/2012--101.1-| |-野马队-2012年10月22日-82.1 |-乌鸦--2012年10月22日--83.1-| |-圣徒--2012年10月29日--84.1-| |-野马队-2012年10月28日-85.1-| |-乌鸦--2012年10月29日--86.1-| 此外,假设一支球队的得分保持不变,直到他们打了一场新的比赛,代表了一项新的记录。例如,假设2012年10月21日野马队的评级为102.8 我需要一个带有日期参数的查询,该参数将为每个队返回一条记录,代表该队在指定日期之前的最新比赛。比如说, 如果输入10/23/2012作为日期参数,则查询应返回 |--团队--|-评估日期--|-评级-| |-圣徒-2012年10月15日-81.1-| |-野马队-2012年10月22日-82.1 |-乌鸦--2012年10月22日--83.1-|带日期参数的SQL查询GroupBy,sql,group-by,Sql,Group By,假设我有一张桌子,TeamRatings,看起来像这样 |--团队-|-评估日期-|-评级-| |-圣徒--2012年10月15日--81.1-| |-野马队--2012年10月15日--91.1-- |-乌鸦--10/16/2012--101.1-| |-野马队-2012年10月22日-82.1 |-乌鸦--2012年10月22日--83.1-| |-圣徒--2012年10月29日--84.1-| |-野马队-2012年10月28日-85.1-| |-乌鸦--2012年10月29日--86.1
非常感谢您的帮助。谢谢 在MS 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
您可以使用以下更一般的查询:
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
您正在使用哪些rdbms?