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 张三
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 数码相机
获得
姓名 日期 所购物品 (最后一次购物日期及所购物品)
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 行)
*/
from
a join b c on a.AID=c.AID
where
not exists(select 1 from b where aid=c.aid and 日期>b.日期 )
from
a join b c on a.AID=c.AID
where c.日期=(select max(日期) from b where aid=c.aid)
(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 數碼相機
(select t.* from b where 日期 = (select max(日期) from b where aid = t.aid)) m
where a.aid = m.aid
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 行受影响)
*/