我很欣赏之前已经提出这个问题,但我很难找到一个甚至可以在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
错误,加上它不会像我想的那样精确。
答案 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;