每个记录包含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
做一些循环的短,我一直在“可能的解决方案”读了 - 这里的一些http://stackoverflow.com/questions/2129693/使用组内限制每个组的结果 - 很多过于复杂的查询和条款我不熟悉 –