22,210
社区成员
发帖
与我相关
我的任务
分享
declare @tb1 table(id int,姓名 varchar(10),身份证号 varchar(20))
insert @tb1 values(1,'张三','123412341234123412')
insert @tb1 values(2,'李四','567856785678567856')
declare @tb2 table(id int,姓名 varchar(10),地址 varchar(10),电话 varchar(15),年份 int)
insert @tb2 values(1 ,'张三','北京','13800013800', 2008)
insert @tb2 values(2 ,'张三','北京','13800011234', 2009)
insert @tb2 values(3 ,'李四','上海','13987654321', 2007)
insert @tb2 values(4 ,'李四','北京','13987650000', 2008)
select a.*,b.地址,b.电话,b.年份 from @tb1 a
join
(select c.姓名,c.地址,c.电话,c.年份 from @tb2 c
join (select 姓名,年份=max(年份) from @tb2 group by 姓名) d
on c.姓名=d.姓名 and c.年份=d.年份) b
on a.姓名=b.姓名
/*
id 姓名 身份证号 地址 电话 年份
----------- ---------- -------------------- ---------- --------------- -----------
1 张三 123412341234123412 北京 13800011234 2009
2 李四 567856785678567856 北京 13987650000 2008
(2 行受影响)
*/
-------------------------------------------
-- Author: liangCK 小梁 & angellan 兰儿
-- Date : 2009-05-26 10:21:02
-------------------------------------------
--> 生成测试数据: @tb1
DECLARE @tb1 TABLE (id INT,姓名 VARCHAR(4),身份证号 BIGINT)
INSERT INTO @tb1
SELECT 1,'张三',123412341234123412 UNION ALL
SELECT 2,'李四',567856785678567856
--> 生成测试数据: @tb2
DECLARE @tb2 TABLE (id INT,姓名 VARCHAR(4),地址 VARCHAR(4),电话 BIGINT,年份 INT)
INSERT INTO @tb2
SELECT 1,'张三','北京',13800013800,2008 UNION ALL
SELECT 2,'张三','北京',13800011234,2009 UNION ALL
SELECT 3,'李四','上海',13987654321,2007 UNION ALL
SELECT 4,'李四','北京',13987650000,2008
--SQL查询如下:
SELECT A.*,B.地址,B.电话,B.年份
FROM @tb1 AS A
JOIN @tb2 AS B
ON A.姓名=B.姓名
WHERE NOT EXISTS(SELECT * FROM @tb2
WHERE 姓名=B.姓名 AND 年份>B.年份);
/*
id 姓名 身份证号 地址 电话 年份
----------- ---- -------------------- ---- -------------------- -----------
1 张三 123412341234123412 北京 13800011234 2009
2 李四 567856785678567856 北京 13987650000 2008
(2 row(s) affected)
*/
SELECT A.*,B.地址,B.电话,B.年份
FROM tb1 AS A
JOIN tb2 AS B
ON A.姓名=B.姓名
WHERE NOT EXISTS(SELECT * FROM tb2
WHERE 姓名=B.姓名 AND 年份>B.年份);