select * from (select * from 
UT_MEMBERORGRELA t  where not exists 
               (select 1 from UT_MEMBERORGRELA t1  where t1.Pkid=t.pkid  and TRUNC(t1.Enterdate)>TRUNC(t.Enterdate)))
               
               where mpkid='RTCS000000000109364'
一对三的结果,这样查询还是三条,为什么??

解决方案 »

  1.   

    mpkid='RTCS000000000109364'下查询有三条,为什么这样查还是三条,没有筛选出时间最大的??
      

  2.   

    因为你里面的子查询的exists中筛选的是pkid相同的时间最大值啊,如果你的一个mpkid中有3个不同的pkid当然出来的就是三条,每条都是那个pkid最大的。如果你筛选mpkid最大的,就把子查询中的
    where t1.Pkid=t.pkid 
    改成
    where t1.mPkid=t.mpkid 
      

  3.   

    TRUNC(t1.Enterdate),得到的时间是截断到天,如果3条记录都是同一天的是过滤不掉的。
      

  4.   


    select t.* from 
    UT_MEMBERORGRELA t where not exists 
      (select 1 from UT_MEMBERORGRELA t1 where t1.Pkid=t.pkid and t1.Enterdate>t.Enterdate)
      

  5.   

    是改成MPKid,但是为什么这个么写很慢呢?
      

  6.   

    MPKid是有重复的 关联的时候数据量笛卡尔积 如果表本身的数据量很大就会更慢