a表aid   姓名   
1     张三
2     李四
3     王五b表
bid   aid     日期             所购物品 
1      1     2006-07-07          彩电
2      2     2006-05-05         手机
3      3     2006-04-02         数码相机
4      1     2007-07-07          彩电
5      2     2007-11-05         手机
6      3     2007-01-02         数码相机
获得  
姓名  日期 所购物品   (最后一次购物日期及所购物品)

解决方案 »

  1.   


    create table a(aid int,姓名 varchar(10))
    insert into a
    select 1,'张三'
    union all select 2,'李四'
    union all select 3,'王五'create table b(bid int,aid int,日期 datetime,所购物品 varchar(20))
    insert into b
    select 1,1,'2006-07-07','彩电'
    union all select 2,2,'2006-05-05','手机'
    union all select 3,3,'2006-04-02','数码相机'
    union all select 4,1,'2007-07-07','彩电'
    union all select 5,2,'2007-11-05','手机'
    union all select 6,3,'2007-01-02','数码相机'select 姓名,b1.日期,b.所购物品
    from a
    left join (select aid,max(日期) as '日期' from b group by aid)b1 on a.aid=b1.aid
    left join b on b.aid=b1.aid and b.日期=b1.日期/*
    姓名         日期                                                     所购物品                 
    ---------- ------------------------------------------------------ -------------------- 
    张三         2007-07-07 00:00:00.000                                彩电
    李四         2007-11-05 00:00:00.000                                手机
    王五         2007-01-02 00:00:00.000                                数码相机(所影响的行数为 3 行)
    */
      

  2.   

    select a.姓名,c.日期,c.所购物品
     from
    a join b c on a.AID=c.AID
    where
    not exists(select 1 from b where aid=c.aid and 日期>b.日期 )
      

  3.   

    select   a.姓名,c.日期,c.所购物品 
      from 
    a   join   b   c   on   a.AID=c.AID 
    where c.日期=(select max(日期) from b where aid=c.aid)
      

  4.   

    create table a 
    (aid char(8), name char(10)) ;
    insert into a select '1', '張三' ;
    insert into a select '2', '李四';
    insert into a select '3', '王五';create table b
    (aid char(8), date datetime, goods char(20));
    insert into b select '1', '2006/07/07', '彩電';
    insert into b select '2', '2006/06/06', '手機';
    insert into b select '3', '2006/04/02', '數碼相機';
    insert into b select '1', '2007/07/07', '彩電';
    insert into b select '2', '2007/06/06', '手機';
    insert into b select '3', '2007/05/05', '數碼相機';select * from a ;
    select * from b ;select name as 姓名, b1.date as 日期, b.goods as 所購物品
    from a
    left join (select aid,max(date) as date from b group by aid) b1 on a.aid = b1.aid
    left join b on b.aid=b1.aid and b.date=b1.date
    張三       2007-07-07 00:00:00.000 彩電                
    李四       2007-06-06 00:00:00.000 手機                
    王五       2007-05-05 00:00:00.000 數碼相機            
      

  5.   

    select a.* , m.日期 , m.所购物品 from a,
    (select t.* from b where 日期 = (select max(日期) from b where aid = t.aid)) m
    where a.aid = m.aid
      

  6.   

    create table a(aid int, 姓名 varchar(10))
    insert into a values(1, '张三') 
    insert into a values(2, '李四') 
    insert into a values(3, '王五')
    create table b(bid int, aid int, 日期 datetime, 所购物品 varchar(10))
    insert into b values(1, 1, '2006-07-07', '彩电') 
    insert into b values(2, 2, '2006-05-05', '手机') 
    insert into b values(3, 3, '2006-04-02', '数码相机') 
    insert into b values(4, 1, '2007-07-07', '彩电') 
    insert into b values(5, 2, '2007-11-05', '手机') 
    insert into b values(6, 3, '2007-01-02', '数码相机')
    goselect a.* , m.日期 , m.所购物品 from a,
    (select t.* from b t where 日期 = (select max(日期) from b where aid = t.aid)) m
    where a.aid = m.aiddrop table A,B/*
    aid         姓名         日期                      所购物品
    ----------- ---------- ----------------------- ----------
    1           张三         2007-07-07 00:00:00.000 彩电
    2           李四         2007-11-05 00:00:00.000 手机
    3           王五         2007-01-02 00:00:00.000 数码相机(3 行受影响)
    */