使用针对一个特定列的distinct来选择所有列

时间:2013-11-06 08:59:19

标签: sql oracle oracle10g

我很欣赏之前已经提出这个问题,但我很难找到一个甚至可以在Oracle 10g(10.2.0.5.0)中运行的答案

我有一个名为BASIC的表,其中包含大约70列。目前,我使用以下代码返回指定数量的行(作为示例) - 结果是在5000之后具有MEMBNO的前20个成员

SELECT * FROM BASIC WHERE MEMBNO>5000 AND ROWNUM <=20 ORDER BY MEMBNO;

在返回的20行中,有几行在NINO列中具有相同的值

我想修改我的SELECT语句,以返回包含不同/唯一NINO值的下20行

简单地在*周围包裹DISTINCT会给我一个ORA-00936: missing expression错误,加上它不会像我想的那样精确。

2 个答案:

答案 0 :(得分:2)

您可以尝试下面的代码: - 我使用分析查询概念来仅获取不同的nino值。

     select * from 
        (SELECT b.*,row_number() over (partition by nino order by MEMBNO  ) rn 
FROM BASIC b WHERE MEMBNO>5000)
 where rn =1 AND ROWNUM <=20 ORDER BY MEMBNO;

如果您遇到任何问题,请告诉我。

答案 1 :(得分:1)

我想我已经通过其他来源找到了解决方案

这显示了有重复的行......

select * from basic where rowid not in (select min(rowid) from basic group by nino)

这显示删除了重复行的行...

select * from basic where rowid in (select min(rowid) from basic group by nino)

然后我可以为最终结果添加行计数和membno过滤器......

select * from basic where rowid in (select min(rowid) from basic where membno>6615 group by NINO) and rownum <=20 order by membno;