本人在试做一个计量仪器管理系统.有如下两张表1、《资产总台帐》(计量编号唯一性)计量编号   仪器名称   
010101     游标卡尺
010102     千分尺2、《检定总台帐》(每次仪器检定后就把结果输入去,同一计量编号时间一长就有有多条的数据)
计量编号   校正日期      有效期至010101     2003-05-21    2004-05-20
010101     2004-05-15    2005-05-14
010101     2005-05-05    2006-05-04
010102     2004-05-15    2005-05-14
010102     2005-05-05    2006-05-04
如果我使用{  select  资产总台帐.计量编号,资产总台帐.仪器名称, 检定总台帐.有效期至 from 资产总台帐 inner join  检定总台帐 on 资产总台帐.计量编号=检定总台帐.计量编号 }进行查询 ,会得到下面的组合表:
 计量编号   仪器名称    校正日期      有效期至010101      游标卡尺    2003-05-21    2004-05-20
010101      游标卡尺    2004-05-15    2005-05-14
010101      游标卡尺    2005-05-05    2006-05-04
010102      千分尺      2004-05-15    2005-05-14
010102      千分尺      2005-05-05    2006-05-04检定总台帐中同一仪器所有的记录都会出现,如果我只想得到每种仪器的有效期最新的一条数据:即想得到如下的表(同一计量编号,有效期旧的不显示,即每个计量编号只显示最新的检定数据)计量编号   仪器名称    校正日期      有效期至010101      游标卡尺    2005-05-05    2006-05-04
010102      千分尺      2005-05-05    2006-05-04
必须用什么样的查询语句,谢谢高手指教

解决方案 »

  1.   

    资产总台帐.计量编号,资产总台帐.仪器名称, 检定总台帐.有效期至 from 资产总台帐 inner join  检定总台帐 on 资产总台帐.计量编号=检定总台帐.计量编号 order by 检定总台帐.有效期至 desc top 1
      

  2.   

    select top 1 a.计量编号,a.仪器名称,b.校正日期,b.有效期至 from 资产总台帐 as a inner join 检定总台帐 as b on a.计量编号=b.计量编号 order by b.有效期至 desc
      

  3.   

    两位大侠的SQL语句有如下的问题:“资产总台帐.计量编号,资产总台帐.仪器名称, 检定总台帐.有效期至 from 资产总台帐 inner join  检定总台帐 on 资产总台帐.计量编号=检定总台帐.计量编号 order by 检定总台帐.有效期至 desc top 1” 运行会产生group by 语法错误。
    “select top 1 a.计量编号,a.仪器名称,b.校正日期,b.有效期至 from 资产总台帐 as a inner join 检定总台帐 as b on a.计量编号=b.计量编号 order by b.有效期至 desc”吸能得到一个条数据,无法得到不同计量编号的最新检定数据。
      

  4.   

    就象上面的检定总台帐有两条数据,您的SQL只能返回一个计量编号的数据
      

  5.   

    标准答案来了,结贴吧,呵呵。。select y.* from (select  资产总台帐.计量编号,资产总台帐.仪器名称, 检定总台帐.有效期至 from 资产总台帐 inner join  检定总台帐 on 资产总台帐.计量编号=检定总台帐.计量编号) as y,
    (select 计量编号,max(有效期至) as 有效期至 from (select  资产总台帐.计量编号,资产总台帐.仪器名称, 检定总台帐.有效期至 from 资产总台帐 inner join  检定总台帐 on 资产总台帐.计量编号=检定总台帐.计量编号) group by 计量编号) as x
    where x.计量编号 = y.计量编号 and x.有效期至 =y.有效期至
      

  6.   

    正的不好意思,一时粗心 ,少了一层Group BY