mysql> describe jobs;
+--------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+----------------+
| job_id | int(11) | NO | PRI | NULL | auto_increment |
| candidate_id | int(11) | NO | MUL | NULL | |
| company_id | int(11) | NO | MUL | NULL | |
| start_date | date | NO | MUL | NULL | |
| end_date | date | NO | MUL | NULL | |
+--------------+---------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
每个候选人可以有多个工作。我想为每个候选人找到最新工作(基于开始日期,因为可以将注册结束日期,然后检查)(在PHP中),如果end_Date不是注册日期。
((如果您的最后截止日期不是注册日期,那么您目前正在失业,这就是我想要的;我不知道如何在查询中执行此操作,因此将在PHP中执行此操作) 。
查询SELECT candidate_id, end_Date FROM jobs ORDER BY candidate_id , start_date DESC
使我到达一半。
+--------------+------------+
| candidate_id | end_Date |
+--------------+------------+
| 1 | 2019-08-31 |
| 1 | 2019-01-31 |
| 1 | 2019-05-31 |
| 2 | 0000-00-00 |
| 2 | 2018-02-28 |
| 2 | 2017-05-31 |
| 2 | 2016-09-30 |
| 3 | 0000-00-00 |
| 3 | 2019-05-31 |
| 4 | 2019-04-30 |
| 4 | 2019-09-30 |
((如何)我只能获得每个候选ID的第一个条目(行号为start_date
最近的行?而且我只能得到那些没有注册截止日期的文件吗?
(糟糕,看来我在end_date之前的订购无效)
select j.*
from jobs j
where j.start_date = (
select max(start_date)
from jobs j1
where j1.candidate_id = j.candidate_id and j1.end_date <> '0000-00-00'
)
子查询返回当前候选人的最大start_date
不是end_date
的最大null
。解决此每组头1个问题的另一种典型方法是使用
anti
-左连接:
select j.* from jobs j left join jobs j1 on j1.candidate_id = j.candidate_id and j1.start_date > j.start_date and j1.end_date is not null where j.end_date is not null and j1.job_id is null
[此短语为:给我具有非null
end_date
的记录,对于该记录,不存在具有相同candidate_id
,更大start_date
和非null
end_date
的其他记录。] >