sql讨论

[复制链接]
查看11 | 回复6 | 2008-11-14 14:42:19 | 显示全部楼层 |阅读模式
1.在表abcd中有字段field1,field2,field3,field4,假设记录如下:
field1 field2field3 field4
张三35 0.7856
张三 43 0.7867
里斯52 1.3 64
里斯65 1.2 63
里斯35 1.1 64
万嫂 52 0.8 1.9
万嫂43 0.9 2.9
2.如果想得到如下的查询结果,应该如何写出查询语句。
field1 field2field3 field4
张三 35 0.7856
里斯 35 1.1 64
万嫂43 0.9 2.9
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
用子查询做为筛选条件即可。
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
不行,field2字段是可变的,选中的记录是field1字段相同,field2字段最小值。
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
分析函数的使用:
select field1,field2,field3,field4 from
(select field1,field2,field3,field4,row_number() over (partition by field1 order by field2) rn from abcd)
where rn = 1;
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
非常感谢 nyfor
但是,如果再增加一些记录,全部记录变为如下:
field1 field2 field3 field4
张三 35 0.78 56
张三 43 0.78 67
张三 35 0.58 66
张三 35 0.68 66
里斯 52 1.3 64
里斯 65 1.2 63
里斯 35 1.1 64
万嫂 52 0.8 1.9
万嫂 43 0.9 2.9
需要得到的查询结果是
张三 35 0.78 56
张三 35 0.58 66
张三 35 0.68 66
里斯 35 1.1 64
万嫂 43 0.9 2.9
又改如何写查询呢?
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
主要是分析函数的用法
照着nyfor大虾的思路
换一个分析函数就行了
select field1, field2, field3, field4
from ( select field1, field2, field3, field4, rank() over (partition by field1 order by field2) rk from abcd )
whererk = 1;
回复

使用道具 举报

千问 | 2008-11-14 14:42:19 | 显示全部楼层
感谢,感谢高手指导
我都是用PL/SQL写了一段程序来实现,不知道用分析函数,原来
分析函数如此美妙。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行