Sql - 返回行号

时间:2011-08-05 20:21:36

标签: sql oracle oracle10g greatest-n-per-group

我有一个查询我在2个表上运行。子表对应于父表。

换句话说,父表中有6个条目。

对于这6个条目中的每个条目,都有一个返回1000条记录的外键。

我需要为6个条目中的每个条目返回前25条记录。

我可以返回前150条记录,但不能返回其ID。

select * from table where rownum <150

但这显然不会返回EACH的前25个条目。

任何帮助将不胜感激。感谢。

4 个答案:

答案 0 :(得分:3)

假设一个支持窗口函数的RDBMS:

SELECT q.parent_column_a, q.child_column_b
    FROM (SELECT p.column_a AS parent_column_a, c.column_b AS child_column_b,
                 ROW_NUMBER() OVER(PARTITION BY p.primarykey ORDER BY c.primarykey) AS RowNum
              FROM parent p
                  INNER JOIN child c
                      ON p.primarykey = c.foreignkey) q
    WHERE q.RowNum <= 25

答案 1 :(得分:1)

如果您使用的是SQL Server或Oracle,这就是解决方案。

select * from
(
    select p.parent_id, c.child_id, 
    row_number() over (partition by c.parent_id order by c.child_id) rn
    from parent p inner join child c on p.parent_id = c.parent_id
) subsel
where rn <= 25

答案 2 :(得分:0)

SELECT TOP 25 SubEntries.SubEntryID
FROM Entries Entries
INNER JOIN SubEntries SubEntries
   ON Entries.EntryID = SubEntries.EntryID

答案 3 :(得分:0)

这适用于我的数据

<强>解释

基本上,您使用WHERE子句仅选择子表id位于子表中与其父表对应的所有行的前25行中的那些行。

<强>查询

SELECT * -- Column List
FROM ParentTable
    INNER JOIN SubTable
WHERE SubTable.ID IN 
    (SELECT TOP 25 SubTable.ID 
     FROM SubTable s2 
     WHERE s2.ParentTableID = SubTable.ParentTableID)

这几乎适用于任何sql数据库。