一张表里有列名 职工编号 合同签定日期 到期日期 一个职工编号 可以会有多条数据
比如 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我现在要看全司员工的合同已到期 并且未续签员工的名单,谢谢!
比如 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我现在要看全司员工的合同已到期 并且未续签员工的名单,谢谢!
GROUP BY 职工编号)a where DATEDIFF(day,到期日期,GETDATE())>0
GROUP BY 职工编号) a where _date<getdate()
GROUP BY 职工编号) a where 到期日期<getdate()
提示:因为该列没有包含在聚合函数或 GROUP BY 子句中。
GROUP BY id) a where _date<getdate(),你自己转换试试,我的是表table_date,列:id,_date
GROUP BY 职工编号 获取到的是所有数据
GROUP BY 职工编号) a where 到期日期<getdate() 试下这个,把括号中的中间那个去了
通过group by 职工编号 生成一个表,在根据 职工编号 联合查询你要的那些字段就好了
(
职工编号 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表中,并且姓名和出生日期显示出来。