表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语句怎么写啊?

解决方案 »

  1.   


    select A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否,B.合同起时间,B.合同止时间
    From A inner join B on A.员工档案号=B.员工档案号
      

  2.   

    select A.员工档案号,姓名,性别,年龄,max(合同起时间),max(合同止时间) from a join b on a.编号= b.编号
      

  3.   

    select top 1  表A.员工档案号 ,表A.姓名 表A.年龄 表A.性别 表A.婚否,表B.合同起时间 ,表B.合同止时间 from 表A,表B where 表A.员工档案号 =表B.员工档案号  order by 表B.合同止时间 desc
      

  4.   

    建议你问sql 语句的时候去数据库专区去问,那里数据库高手多
      

  5.   

    怎么能用top 1 呢?我要查询的是所有员工的最后一期合同
      

  6.   

    select A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否,temp.合同起时间,temp.合同止时间
    from A,(
    select 员工档案号,max(合同起时间)as 合同起时间,max(合同止时间)as 合同止时间 from B group by 员工档案号) as temp
    where A.员工档案号=temp.员工档案号
      

  7.   


    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.婚否
      

  8.   

    select A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否,temp.合同起时间,temp.合同止时间
    from A,(
    select 员工档案号,max(合同起时间)as 合同起时间,max(合同止时间)as 合同止时间 from B group by 员工档案号) as temp
    where A.员工档案号=temp.员工档案号
      

  9.   

    SELECT A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否,MAX(B.合同起时间) AS 合同起时间,MAX(B.合同止时间) as 合同止时间 
    FROM A INNER JOIN B ON A.员工档案号=B.员工档案号 
    GROUP BY A.员工档案号,A.姓名,A.年龄,A.性别,A.婚否
      

  10.   

    楼上的几乎都是只能找出
    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.员工档案号
      

  11.   

    declare @t table(员工档案号 varchar(10),姓名 varchar(10),年龄 int,性别 varchar(2),婚否 varchar(2))
    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 行)*/