2012-10-23 122 views
0

好了,所以我有一个表基于该结构的下面的列选择所有列,1是不同

| id | release_id | publish_date | category | title | 

,一个release可以具有多个类别,这给它一个新的线在表。我的一个页面浏览列出了最新的x版本(所有类别)。当我运行像这样的查询:

select * 
from (select * 
     from TABLE 
     order by PUBLISH_DATE DESC) 
where rownum <= 10 

如果在这种情况下的最新一期,10,版本有多个类别,它会返回两次,所以我尝试添加任何UNIQUE或DISTINCT(或任何其他正确的方式),以便返回的行的RELEASE_ID不同。

当我运行选择DISTINCT RELEASE_ID时,只返回该列,但我仍然需要来自其他列的数据。任何帮助表示赞赏。

+0

那么,你是否想随机选择一个带有给定'release_id'的记录,丢弃除了一个类别和标题之外的所有记录? – ruakh

+0

是的,在这种情况下,发布的类别并不重要,只有release_id是唯一的 – mtaylor314

回答

1

由于oracle支持ROW_NUMBER()和窗口函数,如果它符合您的需求,请尝试以下操作。

SELECT id, release_id, publish_date, category, title 
FROM 
(
    SELECT id, release_id, publish_date, category, title, 
      ROW_NUMBER() OVER 
      (PARTITION BY category ORDER BY Publish_DATE DESC) rn 
    FROM tableName 
) x 
WHERE rn = 1 
+0

这绝对是让我沿着正确的路径发展,因为我获得了独特的结果。你可以帮助我了解变量**吗?为什么它应该是1? – mtaylor314

0

如何

select * from TABLE 
where release_id in (select release_id from 
         (select distinct(release_id) from TABLE order by PUBLISH_DATE DESC) 
         where rownum <= 10) 
0

你不能做到这一点,因为relese_id有1与类别一对多的关系。 如果你想要独特的release_id,你怎么能得到“其他列”数据? (如类别)。 您只能执行在任何其他列上运行的聚合函数。

相关问题