有一个表,其中包括3个字段,分别是
【员工编号】、【合同序号】、【合同开始时间】
每个员工可能有多个合同,比如
00001 1 2000-1-1
00001 2 2005-1-1
00001 3 2007-1-1
00002 1 2004-1-1
00002 2 2005-1-1
如何将每个员工最后的合同选出来,如上述例子,结果期望为:
00001 3 2007-1-1
00002 2 2005-1-1
sql 选取分类最大的记录
答案:4 悬赏:0 手机版
解决时间 2021-02-07 13:19
- 提问者网友:一抹荒凉废墟
- 2021-02-07 01:27
最佳答案
- 五星知识达人网友:天凉才是好个秋
- 2021-02-07 01:45
将每个员工最后的合同选出来(有几种方法):
方法1:
select t1.*
from 表 t1
where not exists (select 1 from 表 t2 where t2.员工编号=t1.员工编号 and t2.合同序号>t1.合同序号)
方法2:
select t1.*
from 表 t1
inner join
(
select 员工编号,max(合同序号) max_num from 表 group by 员工编号
) t2
on t.员工编号 = t2.员工编号 and t1.合同序号 = t2.max_num
方法3:
select t1.员工编号,t1.合同序号,t1.合同开始时间
from 表 t1
left join 表 t2
on t1.员工编号=t2.员工编号 and t1.合同序号 <=t2.合同序号
group by t1.员工编号,t1.合同序号,t1.合同开始时间
having count(t2.合同序号)=1
方法1:
select t1.*
from 表 t1
where not exists (select 1 from 表 t2 where t2.员工编号=t1.员工编号 and t2.合同序号>t1.合同序号)
方法2:
select t1.*
from 表 t1
inner join
(
select 员工编号,max(合同序号) max_num from 表 group by 员工编号
) t2
on t.员工编号 = t2.员工编号 and t1.合同序号 = t2.max_num
方法3:
select t1.员工编号,t1.合同序号,t1.合同开始时间
from 表 t1
left join 表 t2
on t1.员工编号=t2.员工编号 and t1.合同序号 <=t2.合同序号
group by t1.员工编号,t1.合同序号,t1.合同开始时间
having count(t2.合同序号)=1
全部回答
- 1楼网友:鸽屿
- 2021-02-07 05:11
select 员工编号,max(合同开始时间) from tablename group by 员工编号
- 2楼网友:神鬼未生
- 2021-02-07 04:39
这么难得问题好意思不加分吗
select t.* from t inner join (
select 员工编号,max(合同序号) m from t group by 员工编号) tm
on t.员工编号 = tm.员工编号 and t.合同序号 = tm.m
楼上不对,结果集中没有合同序号
- 3楼网友:洎扰庸人
- 2021-02-07 03:22
区间的话,需要用and来进行双条件替换,不能直接 22 and id<5;
解释:and表示的是必须同时满足条件,也就是说查询出id大于2并且小于5( 2
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯