导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求一SQL语句

qlepdql 2007-12-22 09:55:51
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 数码相机


获得
姓名 日期 所购物品 (最后一次购物日期及所购物品)
...全文
48 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-12-22
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 行受影响)
*/
回复
dawugui 2007-12-22
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
回复
lqiiqqqq 2007-12-22
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 數碼相機
回复
中国风 2007-12-22
select a.姓名,c.日期,c.所购物品
from
a join b c on a.AID=c.AID
where c.日期=(select max(日期) from b where aid=c.aid)
回复
中国风 2007-12-22
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.日期 )
回复
wzy_love_sly 2007-12-22
子查询没有ls的快
回复
qlepdql 2007-12-22
那用子查询怎么做!!!
回复
qlepdql 2007-12-22



姓名 日期 所购物品
张三 2007-07-07 彩电
李四 2007-11-05 手机
王五 2007-01-02 数码相机

就像上面一样每人最后一次购物日期及所购物品!!






回复
gahade 2007-12-22

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 行)
*/
回复
sunhonglei2004 2007-12-22
没有看明白,学习
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告