php mysql根据多个条件获取最新记录并计数

php mysql根据多个条件获取最新记录并计数,php,mysql,sql,Php,Mysql,Sql,我有一个桌上工作人员 id | staff Name | adress ------------------------- 1 | Mr.A | Any Address 2 | Mr. B | Any Address 第二表-就业历史 eid | staff_id | school_id | type | grade | date_of_appointmet -------------------------------------------------

我有一个桌上工作人员

id | staff Name | adress
-------------------------
1 | Mr.A        | Any Address
2 | Mr. B       | Any Address
第二表-就业历史

eid | staff_id | school_id | type       | grade | date_of_appointmet
--------------------------------------------------------------------
1   | 1         | 1        |Promotion   | 17    | 2012-12-12
2   | 1         | 2        |promotion   | 18    | 2013-2-2
3   | 2         | 2        |appointment | 17    | 2013-3-3
 and so on tables moves
现在的问题是

  • 我想从员工表中获取该人员的最新工作及其详细信息
  • 我如何计算17个年级的员工中有多少人在学校工作 (请记住,员工1(a先生)现在已晋升至18岁,现在在学校2工作。)

    • 像这样的东西怎么样

      SELECT *
      FROM employment_history eh1
      WHERE eh1.date_of_employment = (
          SELECT max(eh2.date_of_employment)
          FROM staff s
          JOIN employment_history eh2 ON s.id = eh2.staff_id
          WHERE s.id = ?
      )
      
      重新放置
      ,或根据需要使用
      bind_param()

      select staff_id, max(date_of_appointment) as date_of_appointment
      from employment_history
      group by staff_id
      
      此查询将返回每个员工id的最新员工记录。将其转换为子查询并连接到就业历史表

      Select grade, count(1) 
      from
      (select staff_id, max(date_of_appointment) as date_of_appointment
      from employment_history
      group by staff_id) a
      inner join employment_history e on e.staff_id = a.staff_id and a.date_of_appointment = e.date_of_appointment
       group by grade
      

      此解决方案假定staff_id+date_of_appointment是一个唯一的键…如果您有多行,其中一个staff_id在一个日期中有多个雇用历史记录条目,则此操作将不起作用。您需要一些逻辑来使“最近的就业历史记录条目”返回唯一的数据组合…如果员工id+max(任命日期)不唯一,您需要在返回唯一数据的“a”子查询中提出逻辑。

      您能告诉我们您已经尝试过哪些查询吗?如果使用我记忆中的或搜索过的内容,如就业史、内部加入和应用限制,但无法获得我问题的第二部分,我稍微修改了查询,使其与eh1的更多条件相匹配,它正在运行voilla!