表A  档案号,姓名
      001    AA
      002    BB
      003    CC
表B  档案号,日期,目的地
      001   10-09-10  上海
      002   10-09-13  北京
      003   10-09-15  西安
      001   10-09-20  昆明
      002   10-09-25  成都
      003   10-09-22  合肥
      001   10-10-08  广州求最后一次出差列表
      001   10-10-08 广州
      002   10-09-25 成都
      003   10-09-22 合肥这怎么写?    

解决方案 »

  1.   

    select t.* from b t where 日期 = (select max(日期) from b where 档案号 = t.档案号)
    select t.* from b t where not exists (select 1 from b where 档案号 = t.档案号 and 日期 > t.日期)
      

  2.   

    create table B(档案号 varchar(10),日期 varchar(10),目的地 varchar(10))
    insert into b values('001', '10-09-10', '上海')
    insert into b values('002', '10-09-13', '北京')
    insert into b values('003', '10-09-15', '西安')
    insert into b values('001', '10-09-20', '昆明')
    insert into b values('002', '10-09-25', '成都')
    insert into b values('003', '10-09-22', '合肥')
    insert into b values('001', '10-10-08', '广州')
    goselect t.* from b t where 日期 = (select max(日期) from b where 档案号 = t.档案号) order by t.档案号
    /*档案号        日期         目的地        
    ---------- ---------- ---------- 
    001        10-10-08   广州
    002        10-09-25   成都
    003        10-09-22   合肥(所影响的行数为 3 行)
    */
    select t.* from b t where not exists (select 1 from b where 档案号 = t.档案号 and 日期 > t.日期) order by t.档案号/*档案号        日期         目的地        
    ---------- ---------- ---------- 
    001        10-10-08   广州
    002        10-09-25   成都
    003        10-09-22   合肥(所影响的行数为 3 行)
    */drop table b
      

  3.   

    create table A(档案号 varchar(10),姓名 varchar(10))
    insert into a values('001', 'AA')
    insert into a values('002', 'BB')
    insert into a values('003', 'CC')create table B(档案号 varchar(10),日期 varchar(10),目的地 varchar(10))
    insert into b values('001', '10-09-10', '上海')
    insert into b values('002', '10-09-13', '北京')
    insert into b values('003', '10-09-15', '西安')
    insert into b values('001', '10-09-20', '昆明')
    insert into b values('002', '10-09-25', '成都')
    insert into b values('003', '10-09-22', '合肥')
    insert into b values('001', '10-10-08', '广州')
    goselect a.姓名 , t.* from a , b t where a.档案号 = t.档案号 and 日期 = (select max(日期) from b where 档案号 = t.档案号) order by t.档案号
    /*姓名         档案号        日期         目的地        
    ---------- ---------- ---------- ---------- 
    AA         001        10-10-08   广州
    BB         002        10-09-25   成都
    CC         003        10-09-22   合肥(所影响的行数为 3 行)
    */
    select a.姓名 ,t.* from a , b t where a.档案号 = t.档案号 and not exists (select 1 from b where 档案号 = t.档案号 and 日期 > t.日期) order by t.档案号/*姓名         档案号        日期         目的地        
    ---------- ---------- ---------- ---------- 
    AA         001        10-10-08   广州
    BB         002        10-09-25   成都
    CC         003        10-09-22   合肥(所影响的行数为 3 行)
    */drop table a , b
      

  4.   

    select b.档案号,max(b.日期),b.目的地 from b group by 档案号,日期
      

  5.   


    同意楼上方法,不过不能再按"日期"分组了。
    select b.档案号,max(b.日期),b.目的地 from b group by 档案号
    这样就可以了。能满足楼主需求。。