这个sql逻辑怎么写

同一个岗位,生效时间取最原始的,职级选最新的
不同岗位都取最新的就行

比如,一个人在这个岗位三年,竞升了两次,目前最新职级是a,时间是2022-12-31,但它最开始待在这个岗位的时间是2021-7-6,职级是c;所以要生效时间取2021-7-6,职级取a,搞成一条数据!

为了得到这个结果,你可以考虑这样的SQL语句:

SELECT 
  post, 
  MAX(date) as date,
  MAX(level) as level
FROM 
  table1
GROUP BY 
  post

这个语句会按照岗位进行分组,对于每一组,选出最新的生效时间和最新的职级。

如果你要按照人来统计,那么可以这样写

SELECT 
  id,
  MAX(CASE WHEN level='a' THEN date ELSE null END) as date,
  MAX(level) as level
FROM 
  table1
GROUP BY 
  id

这个语句会按照人进行分组,对于每一组,选出最新的生效时间和最新的职级。

这里假设表中有列为id,post,level,date,如果表中列不一样,请修改上述语句

usercode人员代码 ,persontypeid岗位,dutyid职级,updatedate 任职时间,自己对比着改一下

 select a.usercode, a.persontypeid,a.dutyid, max(a.updatedate)
   from table  a
   inner join (select a.usercode, a.persontypeid,max(a.dutyid) maxdutyid
                from  table a
               where a.usercode = '173502382'
               group by a.usercode, a.persontypeid  ) b
     on a.usercode = b.usercode
    and a.persontypeid = b.persontypeid and a.dutyid=b.maxdutyid
  group by a.usercode, a.persontypeid,a.dutyid;