是这样的,我的一个朋友突然问我这么一个问题,怎么把指定日期交过两次话费的名单列出来,至于怎么返话费不用管。数据库结构如下:
sell_no:订单编号
name:姓名
phone:手机号
amount:金额
date:充值日期
上边就这些有效字段,假如数据(数据纯属虚构,如有*,纯是巧合)如下:
sell_no       name     phone           amount     date
00000000001   李晓红   15822533496     50         2011-10-24 08:09:23
00000000002   李晓红   15822533496     60         2011-10-24 08:15:34
00000000003   李晓红   15822533496     30         2011-10-24 08:20:56
00000000004   杨  轩   18200000000     100        2011-10-24 07:59:43
00000000005   杨  轩   18200000000     200        2011-10-24 08:11:11
00000000006   柳梦璃   18211111111     50         2011-10-24 09:09:46
00000000007   韩菱纱   18222222222     50         2011-10-24 08:09:45
00000000008   云天河   18333333333     50         2011-10-24 08:09:25
把以上数据今天交过2次话费的数据取出来,要取的结果如下:
00000000001   李晓红   15822533496     50         2011-10-24 08:09:23
00000000002   李晓红   15822533496     60         2011-10-24 08:15:34
00000000003   李晓红   15822533496     30         2011-10-24 08:20:56
00000000004   杨  轩   18200000000     100        2011-10-24 07:59:43
00000000005   杨  轩   18200000000     200        2011-10-24 08:11:11
因为今天李晓红和杨轩交过两次以上话费,所以有他们的数据,而柳梦璃,韩菱纱,云天河只交过一次,所以没他们的数据。
就这个意思,请问各位有没有解决的办法呢???

解决方案 »

  1.   

    having count(name)=2  剩下自己发挥吧
      

  2.   

    have a try
    select a.sell_no, a.name, a.phone, a.amount, a.date
      from your_table
     where to_char(a.date, 'YYYY-MM-DD') = '2011-10-24'
       and (select count(1) from your_table where phone=a.phone and to_char(date, 'YYYY-MM-DD') = to_char(a.date, 'YYYY-MM-DD')) > 1
      

  3.   

    搞定了,谢谢了。
    select * from deal where date_format(date,'%Y-%m-%d')="2011-10-24" and phone in (select phone from deal where date_format(date,'%Y-%m-%d')="2011-10-24" group by phone having count(phone)>1) order by phone;
      

  4.   

    搞定了就好,我写也会是grope by .. having
      

  5.   

    请问还有别的方法吗?我这里嵌套了一个select语句,感觉效率低了点啊!……