繁体   English   中英

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

[英]php mysql Get the latest records based on multiple conditions and count them

我有一张桌子-工作人员

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

现在的问题是

  • 我想从人员表中获取该人的最新工作及其详细信息
  • 我如何计算在school_id 1中工作的17位年级员工中有多少(请记住,staff_id 1(mr.a)现在已升任18位,现在在school_id 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

该查询将返回每个staff_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具有一个日期的多个雇用历史记录条目,则该行将不起作用。 您需要一些逻辑来使“最近的雇用历史记录”返回唯一的数据组合...如果staff_id + max(date_of_appointment)不是唯一的,则需要在“ a”子查询中给出逻辑返回唯一数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM