【发布时间】:2018-05-16 04:10:26
【问题描述】:
我有这个 T-SQL 查询
WITH CTE AS
(
SELECT
m.Season AS 'Season',
SUM(bi.Runs) AS 'Runs',
p.LastName + ' ' + SUBSTRING(p.FirstName, 1, 1) AS 'PlayerName'
FROM Player p
JOIN BatInnings bi on bi.fk_Player_Id = p.id
JOIN Innings i on i.Id = bi.fk_Innings_Id
JOIN Team t on t.id = i.fk_Team_Id
JOIN Match m on m.id = i.fk_Match_Id
WHERE
(p.id = @playerId OR @playerId IS NULL)
AND m.MatchType IN (@matchType1, @matchType2, @matchType3)
AND (i.fk_Team_Id = @teamId OR @teamId IS NULL)
AND (t.fk_Club_Id = @clubId OR @clubId IS NULL)
GROUP BY
m.season, p.LastName + ' ' + SUBSTRING(p.FirstName, 1, 1)
)
SELECT CTE.*
FROM CTE
WHERE CTE.Runs = (SELECT MAX(CTE2.Runs)
FROM CTE CTE2
WHERE CTE2.Season = CTE.Season)
ORDER BY CTE.Season
这会根据每个赛季的最高得分手拉出一个列表。结果将如下所示。
Season Runs Player
1990/91 689 Todd D
1991/92 617 Grantham N
1992/93 838 Todd D
1993/94 532 Todd D
1994/95 628 Todd D
1995/96 584 Downer M
1996/97 743 Todd D
1997/98 742 Brown S
1998/99 841 Todd D
1999/00 902 Hart M
我想进一步查询这个查询,然后找出每条记录高于前一个选择的记录。因此,使用前面的列表,此查询的结果将类似于
Season Runs Player
1990/91 689 Todd D
1992/93 838 Todd D
1998/99 841 Todd D
1999/00 902 Hart M
如果需要,很乐意提供更多信息。
谢谢
【问题讨论】:
标签: sql sql-server common-table-expression sql-server-2017