永发信息网

sql 选取分类最大的记录

答案:4  悬赏:0  手机版
解决时间 2021-02-07 13:19
  • 提问者网友:一抹荒凉废墟
  • 2021-02-07 01:27
有一个表,其中包括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
最佳答案
  • 五星知识达人网友:天凉才是好个秋
  • 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楼网友:鸽屿
  • 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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯