Запрос с сортировкой

WD_KMS
Дата: 11.03.2016 16:47:37
Добрый день.

Есть таблица вида:
Год - ФИО - Сумма
2010 - Иванов - 2000
2012 - Петров - 2500
...
2016 - Антонов - 2200

И таких записей большое количество. Нужно же вывести список по 10 строк с каждого года с наибольшими суммами.
guest_rusimport
Дата: 11.03.2016 20:15:30
WD_KMS,
если суммы в году все разные, то можно так
SELECT z2.Год, z2.ФИО, z2.Сумма
FROM (SELECT p1.Год, p1.ФИО, p1.Сумма, (Select Sum(1) From t1 AS p Where p.Сумма>=p1.Сумма And p.Год=p1.Год) AS Номер
FROM t1 AS p1
ORDER BY p1.Год, p1.Сумма DESC) as z2
WHERE (((z2.Номер)<=10));
guest_rusimport
Дата: 11.03.2016 21:30:04
WD_KMS,
если в году есть и одинаковые суммы , то можно так:

запрос
SELECT Запрос2.Год, Запрос2.ФИО, Запрос2.Сумма
FROM (SELECT DISTINCT z1.Год, z1.ФИО, z1.Сумма, Numeration(z1.Год) AS num
FROM (SELECT t1.Год, t1.ФИО, t1.Сумма
FROM t1
ORDER BY t1.Год, t1.Сумма DESC) as z1
WHERE not isnull(z1.Год)) as Запрос2
WHERE (((Запрос2.num)<=2))


и функция в общем модуле
Public Function Numeration(Optional var As String) As Long
Static n As Long
Static fam As String
If IsMissing(var) Then
n = 0
Else
If fam = var Then
n = n + 1
Else
n = 1
End If
End If
Numeration = n
fam = var
End Function
guest_rusimport
Дата: 11.03.2016 21:34:29
WD_KMS,
fix
WHERE (((Запрос2.num)<=  10  ))