首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于合同时间的SQL

2013-03-25 
求一个关于合同时间的SQL一张表里有列名职工编号合同签定日期到期日期一个职工编号 可以会有多条数据比如A

求一个关于合同时间的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                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表中,并且姓名和出生日期显示出来。

热点排行