选择1为不同的所有列

时间:2012-10-23 15:14:15

标签: sql oracle

好的,所以我有一个包含以下列的表

| 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不同于行返回。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

答案 2 :(得分:0)

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