一张表里有列名  职工编号  合同签定日期   到期日期  一个职工编号 可以会有多条数据  
比如  A0001  1999.1.1   2000.1.1
A001 2000.1.1  2005.1.1
A001 2005.1.1  2009.1.1
A001 2009.1.1  2013.1.1
A002 2009.1.1  2012.1.1
A002 2012.1.1  2014.1.1我现在要看全司员工的合同已到期 并且未续签员工的名单,谢谢!

解决方案 »

  1.   

    (SELECT 职工编号,MAX(到期日期) AS '到期日期' FROM tb
    GROUP BY 职工编号)a where DATEDIFF(day,到期日期,GETDATE())>0
      

  2.   

    select * from (SELECT 职工编号,合同签定日期,MAX(到期日期) AS '_date' FROM 表
    GROUP BY 职工编号) a where _date<getdate()
      

  3.   

    select * from (SELECT 职工编号,合同签定日期,MAX(到期日期) AS '_date' FROM 表
    GROUP BY 职工编号) a where 到期日期<getdate()
      

  4.   


    提示:因为该列没有包含在聚合函数或 GROUP BY 子句中。
      

  5.   

    怎么会呢,我试过的,我的原代码select * from (SELECT id,MAX(_date) AS '_date' FROM table_date
    GROUP BY id) a where _date<getdate(),你自己转换试试,我的是表table_date,列:id,_date
      

  6.   

    另外一个问题 上面两位提供的代码 我试了下,SELECT 职工编号,MAX(到期日期) AS '到期日期' FROM tb
    GROUP BY 职工编号   获取到的是所有数据
      

  7.   

    select * from (SELECT 职工编号,MAX(到期日期) AS '_date' FROM 表
    GROUP BY 职工编号) a where 到期日期<getdate()    试下这个,把括号中的中间那个去了
      

  8.   

    如果 表中有10列 包含其它的数据,上面的方法只能取其中2列,如果把其它列名加到这个GROUP BY里面的话 出来的结果又不一样了  有什么 方法解决吗?
      

  9.   


    通过group by 职工编号 生成一个表,在根据 职工编号 联合查询你要的那些字段就好了
      

  10.   

    create table tb
    (
    职工编号 varchar(20),
    合同签定日期  varchar(20),
    到期日期    varchar(20),
    职工姓名    varchar(20),
    出生日期    varchar(20)
    )
    insert into tb 
    select 'A0001','1999.1.1','2000.1.1','刘一','1989.1.1' union all
    select 'A0001','2000.1.1','2005.1.1','刘一','1989.1.1' union all
    select 'A0001','2005.1.1','2009.1.1','刘一','1989.1.1' union all
    select 'A0001','2009.1.1','2013.1.1','刘一','1989.1.1' union all
    select 'A0002','2009.1.1','2012.1.1','陈二','1989.1.1' union all
    select 'A0002','2012.1.1','2014.1.1','陈二','1989.1.1' union all
    select 'A0003','1999.1.1','2010.1.1','张三','1989.1.1' union all
    select 'A0004','1999.1.1','2020.1.1','李四','1989.1.1' union all
    select 'A0005','1999.1.1','2030.1.1','王五','1989.1.1' union all
    select 'A0006','1999.1.1','2011.1.1','赵六','1989.1.1' select t2.* from tb t2 where
    exists 
    (select 1 from (select t1.职工编号,MAX(t1.到期日期)as 到期日期  from tb t1 group by t1.职工编号
    having DATEDIFF(day,max(到期日期),getdate())>0)a where t2.职工编号=a.职工编号 
    and t2.到期日期=a.到期日期)----------
    职工编号                 合同签定日期               到期日期                 职工姓名                 出生日期
    -------------------- -------------------- -------------------- -------------------- --------------------
    A0001                2009.1.1             2013.1.1             刘一                   1989.1.1
    A0003                1999.1.1             2010.1.1             张三                   1989.1.1
    A0006                1999.1.1             2011.1.1             赵六                   1989.1.1(3 行受影响)确定哪些职工是已经到期,而且没有继续签的。
    select t1.职工编号,MAX(t1.到期日期)as 到期日期  from tb t1 group by t1.职工编号
    having DATEDIFF(day,max(到期日期),getdate())>0  
    生成一个a表,在和原来那个表联合查询,看原表中哪些数据存在a表中,并且姓名和出生日期显示出来。