0

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

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

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

4

3 回答 3

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
于 2012-10-23T15:20:04.330 回答
0

How about

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)
于 2012-10-23T15:20:59.137 回答
0

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

于 2012-10-23T17:06:11.967 回答