Каждая запись содержит RecordID, TypeID, GroupID
.
Существует много записей для Type
и многих типов для Group
.
Я хочу вернуть 3 записи для каждой комбинации типа и группы.Выберите ограниченное количество записей для каждой группы.
Любые предложения?
упрощенный выход как этот
Group | Type | Record
------+------+--------
1 | 1 | 1
1 | 1 | 2
1 | 1 | 3
1 | 2 | 1
1 | 2 | 2
1 | 2 | 3
1 | 3 | 1
....
9 | 1 | 1
9 | 2 | 2
etc..
Этого решение, которое работает для меня, вариации ответа.
Это код для миграции, поэтому абсолютная оптимизация не нужна - но оцените дальнейшие указатели.
SELECT *
FROM yourTable t1
WHERE EXISTS
(SELECT RecordId
FROM (
SELECT RecordId, ROW_NUMBER() OVER (PARTITION BY GroupId, TypeId ORDER BY RecordId) As seq FROM yourTable) t2
WHERE seq <= 3 AND t2.RecordId = t1.RecordId
)
ORDER BY GroupId, TypeId
Short сделать несколько петель, я читал на «возможные решения» - некоторые здесь http://stackoverflow.com/questions/2129693/ использование-limit-in-group-by-to-get-n-results-per-group - много сложнейших запросов и терминов, которые я не знаком с –