日期:2014-05-17  浏览次数:20727 次

求一个关于合同时间的SQL
一张表里有列名  职工编号  合同签定日期   到期日期  一个职工编号 可以会有多条数据  
比如  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



我现在要看全司员工的合同已到期 并且未续签员工的名单,谢谢!

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

------解决方案--------------------
select * from (SELECT 职工编号,合同签定日期,MAX(到期日期) AS '_date' FROM 表
GROUP BY 职工编号) a where _date<getdate()
------解决方案--------------------
引用:
引用:引用:
如果 表中有10列 包含其它的数据,上面的方法只能取其中2列,如果把其它列名加到这个GROUP BY里面的话 出来的结果又不一样了  有什么 方法解决吗?

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

怎么联合  能不能具体点  新……

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           &nb