免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: devis.ma
打印 上一主题 下一主题

求一SQL语句 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-05-26 12:08 |只看该作者
原帖由 devis.ma 于 2008-5-21 16:39 发表
这样一个表:
No 名称
--------------
1  名称1
1  名称2
1  名称3
1  名称4
2  名称5
3  名称6
3  名称7


我想检索出来
1 名称1
2 名称5
3 名称6

也就是no一样的情况下只取第一条的名称
如 ...


数据库表里面的记录,没有次序概念吧。能确定相对次序的,必定是基于某个排序。
你想说的是最大值,最小值,rowid最小,rowid最大? 还是随便取一条就可以?

论坛徽章:
0
12 [报告]
发表于 2008-05-26 20:33 |只看该作者
原帖由 doni 于 2008-5-26 11:55 发表
但低版本的ORACLE里,没有PARTITION BY 或rank,要怎么做,大家可以试试看
我想到两种办法,1.用PL/SQL,2.在group by 上做文章


如果只是为了实现功能,不太考虑效率的话,可以这样做:

SELECT NO, NAME
  FROM test1 ta
WHERE ROWID = (SELECT MAX (ROWID)
                  FROM test1 tb
                 WHERE tb.NO = ta.NO);

没什么实际意义,具体是max(rowid),还是min(rowid)看要求了。

论坛徽章:
0
13 [报告]
发表于 2008-05-27 08:41 |只看该作者
原帖由 numenhuang 于 2008-5-26 20:33 发表


如果只是为了实现功能,不太考虑效率的话,可以这样做:

SELECT NO, NAME
  FROM test1 ta
WHERE ROWID = (SELECT MAX (ROWID)
                  FROM test1 tb
                 WHERE tb.NO = t ...

这个SQL等价于
select no,max(name)
   from test1 ta
group by no;
如果要取相同的NO中最大的N条记录?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP