2015-07-13 17 views
0

每个记录包含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 
+0

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

回答

1

尝试这样:

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY GroupId, TypeId ORDER BY RecordId) As seq 
    FROM yourTable) dt 
WHERE seq <= 3 
+0

谢谢,这看起来很干净 - 我会尝试排除它。错误在命令行:3列:13 错误报告 - SQL错误:ORA-00923:FROM关键字找不到预期的地方 –

+0

没有帮助解决错误,恐怕,对不起。 –

+0

如果我将一些实际字段替换为*,则此查询运行正常 - 我可以使用表中的select *,其中在那些结果中 - 或其他内容将在获取时发布。谢谢 –