34,838
社区成员




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', '数码相机')
go
select a.* , m.日期 , m.所购物品 from a,
(select t.* from b t where 日期 = (select max(日期) from b where aid = t.aid)) m
where a.aid = m.aid
drop 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 行受影响)
*/
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
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 行)
*/