Многоуровневый пейджинг
От: _FRED_ Черногория
Дата: 20.01.11 15:15
Оценка:
Есть запрос:
SELECT AVG([Freight]) [AVG], MIN(YEAR([OrderDate])) [Year], [EmployeeID] [Empl], [CustomerID] [Cust]
FROM [Northwind]..[Orders]
GROUP BY [EmployeeID], [CustomerID]
ORDER BY 1;

Возвращающий результат (список агрегатов по двум группам: служащему и заказчику, который может быть отсортирован по любому из полей):
AVG    Year    Empl    Cust
0.12    1996    6    LILAS
0.15    1997    4    BLAUS
0.21    1998    1    COMMI
0.40    1996    7    PERIC
0.45    1996    1    LAMAI
0.53    1998    8    LONEP
0.56    1996    2    LONEP
0.82    1998    4    WILMK
1.10    1997    9    CACTU
1.21    1998    3    ALFKI
1.27    1998    4    OCEAN
1.28    1997    3    LONEP
1.30    1996    3    FURIB
1.35    1997    6    FOLIG
1.36    1998    1    GALED
…

Требуется отфильтровать выборку так, что бы в результате было бы не более пяти служащих ([Empl]) и у каждого служащего не более двух заказчиков ([Cust]):
AVG    Year    Empl    Cust
0.12    1996    6    LILAS
0.15    1997    4    BLAUS
0.21    1998    1    COMMI
0.40    1996    7    PERIC
0.45    1996    1    LAMAI  // + "1" встечается второй раз, поэтому не учитывается
0.53    1998    8    LONEP  // + Вот это пятый служащий
//0.56    1996    2    LONEP  // - Шестой служащий
0.82    1998    4    WILMK  // + Второй заказчик у служащего "4"
//1.10    1997    9    CACTU
//1.21    1998    3    ALFKI
//1.27    1998    4    OCEAN // - Это третий заказчик у служащего "4", отпадает
//1.28    1997    3    LONEP
//1.30    1996    3    FURIB
1.35    1997    6    FOLIG
//1.36    1998    1    GALED // - Это третий заказчик у служащего "1", отпадает


Интересуют варианты для MSSQL (2008), Oracle (10, 11) и MySQL (тут я в нумерации не силён, но тоже можно использовать что-то из самого последнего).
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.