select * from cs_all_log a where id = (select max(id) from cs_all_log b where a.mid = b.mid)这个一执行系统就死了。

解决方案 »

  1.   

    直接select * from cs_all_log就可以了,得到的是相同的结果集
      

  2.   

    select * from cs_all_log a where id  in  (select max(id) from cs_all_log b group by mid)这样呢?
      

  3.   

    没什么问题呀,你的表结构是什么养的?数据量有多大?
    另外既然已经对表使用了别名,那么引用字段的时候最好也加上别名,即:
    select a.* from cs_all_log a where a.id = (select max(b.id) from cs_all_log b where a.mid = b.mid)
      

  4.   

    我要的是所有mid一样的id算一条记录。让后count(*)一下
      

  5.   

    我要的是所有mid一样的id算一条记录。让后count(*)一下
      

  6.   

    select count(distinct mid) from table
      

  7.   

    id,mid分不清楚
    用分析函数试试select  max(id)keep(dense_rank last order by mid)  from cs_all_log  group by mid;
      

  8.   

    你这个表太大了,如果没有猜错的话,这个表是通信运营商的通话记录?
    如果是的话,那至少应该加上时间条件。
    另外,你这个子查询,需要对表访问两次。
    试试下面这个看看:
    select b.* from
    (select a.*
    ,/*dense_rank()*/row_number() over(partition by mid order by id desc) rn
    from cs_all_log) b
    where rn=1
    如果ID有相同的值,就启用dense_rank,注释掉row_number