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

解决方案 »

  1.   

    ==============第一种===============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;
      

  2.   

    呵呵,楼上的方法我都想到了,但是数据量大的时候,执行时间通常很长,特别是distinct,我等了5分钟也没结果!
      

  3.   

    随便选一条记录出来,使用rownum就快很多select servnumber from a where a.id=xxx and rownum <2;
      

  4.   

    楼上的,还不是要写30条SQL语句吗?
    怎样在一条语句中实现啊?
      

  5.   

    select id , (select servnumber from a where a.id=b.id and rownum<2) from a
    where id in ( ... )
      

  6.   

    yuyu1980() 
    按照您的写法,会有很多重复的记录!
    呵呵!
      

  7.   

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