【发布时间】:2020-05-16 13:09:07
【问题描述】:
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)
每个候选人可以有多个工作。我想为每个候选人找到最新的工作(基于开始日期,因为结束日期可以是 0000-00-00),并检查(在 PHP 中)end_Date 是否不是 0000-00-00。
(如果您的最后结束日期不是 0000-00-00,那么您目前处于失业状态,这正是我要寻找的;我不知道如何在我的查询中执行此操作,因此将在 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 行)?我只能得到结束日期不是 0000-00-00 的那些吗?
(糟糕,看来我在 end_date 之前的订单不起作用)
【问题讨论】:
-
很好地删除像
0000-00-00这样的日期,你可以有where end_date != '0000-00-00'
标签: mysql sql date select greatest-n-per-group