假如有表A,里面有2个字段,id,date, B表有2个字段 parentid,material。A的id字段和B的parentid是外键关系。我现在想求出每个material中时间最大的那条记录。
select b.material,a.date from A a inner join B b on a.id=b.parentid and inner join (select bb.material,max(aa.date) from A aa inner join B bb on aa.id=bb.parentid group by bb.material) xx on xx.date = a.date and xx.material=b.materialA,B表的数据都有上万条。上面的写法速度很慢,求一个高效率的sql。

解决方案 »

  1.   

    select * from (
    select a.date, b.material, row_number() over(partition by b.material order by a.date desc) rn
    from a,b
    where a.id = b.parentid )
    where rn = 1;select max(a.date), b.material
    from a,b
    where a.id = b.parentid
    group by b.material;
      

  2.   

    select max(a.date), b.material
    from a,b
    where a.id = b.parentid
    group by b.material;
      

  3.   

    select b.material,Max(a.date) from B b,A a where a.id=b.parentid group by a.date
      

  4.   

    上面错了,
    select b.material,Max(a.date) from B b,A a where a.id=b.parentid group by a.material