2015-03-07 2 views
1

Я пытаюсь получить 5 лучших результатов для каждого человека из таблицы. Я могу получить главный результат для них тем не менее я хочу сумму топ-5Подзапрос с суммой верхних строк X

Select Distinct 
     r.LastName, 
     r.FirstName , 
     r.Class, 
     r.BibNum, 
     (Select top 1 r2.points from Results r2 where r2.season=r.Season and r2.Mountain=r.Mountain and r2.Bibnum=r.bibnum Order By r2.Points Desc) as Points 
from Results as r Where Season='2015' and Mountain='Ski Resort' 
Order By Class, Points Desc 

Колонны:

[Id] [int] IDENTITY(1,1) NOT NULL, 
    [RaceNum] [int] NOT NULL, 
    [BibNum] [int] NOT NULL, 
    [FirstName] [nvarchar](max) NULL, 
    [LastName] [nvarchar](max) NULL, 
    [Sex] [nvarchar](max) NULL, 
    [Class] [nvarchar](max) NULL, 
    [Team] [nvarchar](max) NULL, 
    [FirstRun] [nvarchar](max) NULL, 
    [SecondRun] [nvarchar](max) NULL, 
    [Best] [nvarchar](max) NULL, 
    [Points] [int] NOT NULL, 
    [Season] [int] NOT NULL, 
    [Mountain] [nvarchar](max) NULL 

ответ

2

Вы можете использовать row_number(), чтобы получить первые пять строк, а затем группа по другим полям:

SELECT LastName, 
     FirstName, 
     Class, 
     BibNum, 
     SUM(points) 
FROM  (SELECT LastName, 
        FirstName, 
        Class, 
        BibNum, 
        points, 
        ROW_NUMBER() OVER (PARTITION BY LastName, 
                FirstName, 
                Class, 
                BibNum 
            ORDER BY points DESC) AS rn 
      FROM results 
      WHERE Season='2015' and Mountain='Ski Resort' 
     ) t 
WHERE rn <= 5 
GROUP BY LastName, FirstName, Class, BibNum 
+0

Я не вижу, где вы указываете таблицу здесь ... Я что-то упустил? – BlueBird

+0

@BlueBird нет, ты прав. Мгновенный отказ от рассмотрения - отредактирован. – Mureinik

Смежные вопросы