你的币种为什么不单独放一个字段呢?select substr(d.zjzh,1,8),d.lsh,d.zjye 
from drzjbd d
where (d.zjzh,d.lsh)=(select zjzh,max(lsh) from drzjbd where zjzh=d.zjzh)
AND substr(zjzh,9,2)='01'
这样可能好一些,请大家指正。最好以substr(zjzh,9,2)建立一个基于函数的索引。

解决方案 »

  1.   

    我敢保证你的这个方法在数据超过10000的时候比我的方法慢。因为你的where里面有有一个逐条处理。
      

  2.   

    币种应该单独放一个字段。
    substr(zjzh,9,2)不能很好地利用primary key 提供的索引。9Thoughts(一片绿洲)的方法效率低wwl007:
          没有更好的语法
      

  3.   

    用临时表分步可能会快一些,以下是SQL SERVER 
      

  4.   

    用临时表分步可能会快一些,以下是SQL SERVER 语句,其他DBMS可能不同:
    create Table #Temp
    (
      zjzh      char(10)      not null,
      zjye      number(19,4)  null    ,
      lsh      char(14)      not null, 
      CONSTRAINT pk_111 PRIMARY KEY  CLUSTERED 
    (
    zjzh,
    lsh
    )
    )
    inser #Temp
    select zjzh,zjye,lsh
    from drzjbd 
    where substr(zjzh,9,2)='01'select substr(zjzh,1,8),lsh,zjye
    from #Temp d ,(select zjzh,max(lsh) v_lsh from #Temp a group by zjzh) t
    where d.zjzh=t.zjzh and d.lsh=t.v_lsh