日期:2014-05-17  浏览次数:20965 次

从5千万条记录中检索数据的SQL语句,大哥大姐帮忙
最近在搞BOSS,遇到了一个难题,具体是这样的:
1.表的名字   A,用于存放用户资料(移动手机用户资料),里面记录是千万级的
2.ID字段大约有100种,标识用户手机号码的品牌,如全球通至尊卡,动感地带音乐套餐
3.servnumber字段,用户的手机号码
4.现在的问题是:有30个品牌(ID已知),需要从表A中检索出对应的servnumber,要求每个品牌一条记录(比如神州行家园卡有500万条.随便检索一条即可),30个品牌,显示30行结果,只写一条SQL语句,不用存储过程.
(我用30条select语句,然后union,实在笨的可以,高手指点下)

------解决方案--------------------
==============第一种===============

select a.ID,max(servnumber)
from A a
group by a.ID;


==============第二种===============

select distinct a.ID,first_value(a.servnumber) over(partition by a.ID)
from A a;

------解决方案--------------------
随便选一条记录出来,使用rownum就快很多

select servnumber from a where a.id=xxx and rownum <2;
------解决方案--------------------
select id , (select servnumber from a where a.id=b.id and rownum <2) from a
where id in ( ... )
------解决方案--------------------
rownum 好像每次是随机的
------解决方案--------------------
试试这样(这样找出来的servnumber是每个ID对应的rowid最小的,但不是随机的,不过好像也能解决你的问题):
select servnumber from a where rowid in
(select min(rowid) from a group by id having id in ( 'a ', 'b '));