表A 员工表
员工档案号 姓名 年龄 性别 婚否 。
001 张三 19 男 否
002 李四 23 女 否
表B 合同表
编号 员工档案号 合同起时间 合同止时间
1 001 2008-1-1 2009-1-1
2 002 2006-1-1 2007-1-1
3 001 2002-1-1 2003-1-1
4 002 2008-1-1 2009-1-1
5 001 2008-1-1 2009-1-1
6 002 2008-1-1 2009-1-1我现在想查出 姓名 年龄 性别 婚否和该员工的最后一次合同的起止时间 ,
结果如:
001 张三 19 男 否 2008-1-1 2009-1-1
002 李四 23 女 否 2008-1-1 2009-1-1
这个SQL语句怎么写啊?
员工档案号 姓名 年龄 性别 婚否 。
001 张三 19 男 否
002 李四 23 女 否
表B 合同表
编号 员工档案号 合同起时间 合同止时间
1 001 2008-1-1 2009-1-1
2 002 2006-1-1 2007-1-1
3 001 2002-1-1 2003-1-1
4 002 2008-1-1 2009-1-1
5 001 2008-1-1 2009-1-1
6 002 2008-1-1 2009-1-1我现在想查出 姓名 年龄 性别 婚否和该员工的最后一次合同的起止时间 ,
结果如:
001 张三 19 男 否 2008-1-1 2009-1-1
002 李四 23 女 否 2008-1-1 2009-1-1
这个SQL语句怎么写啊?
select A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否,B.合同起时间,B.合同止时间
From A inner join B on A.员工档案号=B.员工档案号
from A,(
select 员工档案号,max(合同起时间)as 合同起时间,max(合同止时间)as 合同止时间 from B group by 员工档案号) as temp
where A.员工档案号=temp.员工档案号
select A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否,max(B.合同起时间),max(B.合同止时间) From A inner join B on A.员工档案号=B.员工档案号
group by A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否
from A,(
select 员工档案号,max(合同起时间)as 合同起时间,max(合同止时间)as 合同止时间 from B group by 员工档案号) as temp
where A.员工档案号=temp.员工档案号
FROM A INNER JOIN B ON A.员工档案号=B.员工档案号
GROUP BY A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否
8 001 2008-1-1 2019-1-1
这一条数据的sql查询,不知是否是楼主想要的。--下面是只按合同开始时间做筛选的
create table ##A
(
员工档案号 int,
姓名 varchar(40),
年龄 int,
性别 varchar(4),
婚否 bit
)insert into ##A(员工档案号,姓名,年龄,性别,婚否)
values(1,'张三',19,'男',0)insert into ##A(员工档案号,姓名,年龄,性别,婚否)
values(2,'李四',23,'女',0)create table ##B
(
编号 int,
员工档案号 int,
合同起时间 datetime,
合同止时间 datetime
)insert into ##B(编号,员工档案号,合同起时间,合同止时间)
values(1,1,'2002-01-01','2003-01-01')insert into ##B(编号,员工档案号,合同起时间,合同止时间)
values(2,1,'2008-01-01','2009-01-01')insert into ##B(编号,员工档案号,合同起时间,合同止时间)
values(3,1,'2008-01-01','2009-01-01')insert into ##B(编号,员工档案号,合同起时间,合同止时间)
values(4,2,'2006-01-01','2007-01-01')insert into ##B(编号,员工档案号,合同起时间,合同止时间)
values(5,2,'2008-01-01','2009-01-01')insert into ##B(编号,员工档案号,合同起时间,合同止时间)
values(6,2,'2008-01-01','2019-01-01')
select distinct ##A.员工档案号,姓名,性别,年龄,tempB1.合同起时间,tempB1.合同止时间
from ##A right join
(select tempB.员工档案号,tempB.合同起时间,##B.合同止时间
from ##B right join
(select 员工档案号,max(合同起时间) as 合同起时间
from ##B
group by 员工档案号
) as tempB
on tempB.员工档案号=##B.员工档案号 and tempB.合同起时间=##B.合同起时间
)as tempB1
on ##A.员工档案号 = tempB1.员工档案号
insert @t select '001','张三',19,'男','否'
union all select '002','李四',23,'女','否'declare @a table(编号 int,员工档案号 varchar(10),合同起时间 datetime,合同止时间 datetime)
insert @a select 1,'001','2008-1-1','2009-1-1'
union all select 2,'002','2006-1-1','2007-1-1'
union all select 3,'001','2002-1-1','2003-1-1'
union all select 4,'002','2008-1-1','2009-1-1'
union all select 5,'001','2008-1-1','2009-1-1'
union all select 6,'002','2008-1-1','2009-1-1'
select distinct t.员工档案号,t.姓名,t.年龄,t.性别,t.婚否,c.合同起时间,c.合同止时间
from @t t left join (
select *
from @a a
where not exists
(select * from @a where a.员工档案号=员工档案号
and a.合同起时间<合同起时间 and a.合同止时间<合同止时间))c
on t.员工档案号=c.员工档案号
where t.婚否='否'
order by t.员工档案号
/*
所影响的行数为 2 行)
(所影响的行数为 6 行)员工档案号 姓名 年龄 性别 婚否 合同起时间 合同止时间
---------- ---------- ----------- ---- ---- ------------------------------------------------------ ------------------------------------------------------
001 张三 19 男 否 2008-01-01 00:00:00.000 2009-01-01 00:00:00.000
002 李四 23 女 否 2008-01-01 00:00:00.000 2009-01-01 00:00:00.000(所影响的行数为 2 行)*/