限制此JOIN查询,以便返回每个左侧表的一个结果?

时间:2014-07-23 12:53:20

标签: mysql sql

我有这两个表:

Person:
+----+-------+
| ID | name  |
+----+-------+
|  1 | John  |
|  2 | Frank |
+----+-------+

Position:
+----+---------+----------+------------+
| ID | name    | personID | startDate  |
+----+---------+----------+------------+
|  1 | Cashier | 1        | 2013-01-01 |
|  2 | Manager | 1        | 2013-04-23 |
|  3 | Cashier | 2        | 2014-02-01 |
+----+---------+----------+------------+

Position表跟踪一个人持有的各种职位。

如何创建一个列表,显示每个人及其当前位置(哪个位置具有最新的开始日期)?基本上我需要限制JOIN表的Position只返回一个结果。

我尝试了以下代码。

SELECT p.id, h.positionID FROM person p JOIN position h ON p.id = h.personID

1 个答案:

答案 0 :(得分:4)

请尝试以下方法: -

select p.ID, pp.name PersonName, p.name PositionName ,p.startDate 
from Position p
inner join
(select personID, max(startDate) sdate from Position group by personID) as a
on p.personID = a.personID and p.startDate = a.sdate
left join Person pp
on pp.ID = p.personID  

然而,强烈建议您发布您尝试过的代码。

<强> SQL Fiddle