假定数据库中有一张邮费表,该表有邮费ID、送达地区、重量区间段、邮费、生效日期等5个字段,其中邮费ID为主键,送达地区、重量区间段和生效日期为唯一键。请问如何使用一条SQL语句取出每个送达地区和重量区间段组合的最新邮费?例如该表有如下数据:邮费ID/送达地区/重量区间段/邮费/生效日期
1/上海/20/1.0/20110101
2/北京/20/1.0/20110101
3/上海/20/1.2/20110501那么应该结果集中应该有如下记录:邮费ID/送达地区/重量区间段/邮费/生效日期
2/北京/20/1.0/20110101
3/上海/20/1.2/20110501

解决方案 »

  1.   

    select * from 邮费表 a
     where not exists(select 1 from 邮费表 
                   where 送达地区=a.送达地区 and 重量区间段=a.重量区间段 and 生效日期>a.生效日期)
      

  2.   

    select * from tb t
    where not exists(select * from tb where 送达地区=t.送达地区 and 生效日期>t.生效日期)
      

  3.   

    select * from 邮费表 a
    where 生效日期=(select max(生效日期) from 邮费表 where ID=A.ID)
      

  4.   

    select * from tb 
    where not exists 
    (select `1 from tb as a where a.送达地区=tb.送达地区 and a.生效日期>tb.生效日期)
      

  5.   

    select * from 邮费表 t where 生效日期=(select max(生效日期) from 邮费表 where ID=t.ID)
      

  6.   

    看了各位的解答,非常感谢哦!我需要尽量考虑一下查询的性能。大家给出的都是使用子查询的,使用连接是否会快一些呢?比如:<sql>
    select * from 邮费表 a
     inner join (select 送达地区, 重量区间段, max(生效日期) as 生效日期
                   from 邮费表
                  group by 送达地区, 重量区间段) b
        on a.送达地区=b.送达地区 and a.重量区间段=b.重量区间段 and a.生效日期=b.生效日期  
    </sql>
      

  7.   

    select * from tb t
    where not exists(select * from tb where 送达地区=t.送达地区 and 生效日期>t.生效日期)