好的,所以我有一个包含以下列的表
| 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
时,只返回该列,但是我仍然需要来自其他列的数据。任何帮助表示赞赏。
答案 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,你如何获得“其他列”数据? (比如类别。) 您只能执行在任何其他列上运行的聚合函数。