我有两张 table 。一张 table 与公司。另一张 table 上坐着军官。我想向公司展示他们现任的主管。
每家公司都有高管的历史。公司表如下所示:
-------------------------------
| company_number | name |
|-------------------------------|
| B1204_GnR103 | Flower LLC |
| B1204_GnR104 | Marketing LLC|
-------------------------------
军官表如下所示:
-----------------------------------------------
| id | name | company_id | start_date |
|-----------------------------------------------|
| 1 | John Doe | B1204_GnR103 | 2018-02-06 |
| 2 | Dianne Ameter| B1204_GnR104 | 2017-01-07 |
| 3 | Dylan Mering | B1204_GnR103 | 2016-04-23 |
| 4 | Fleece Gold | B1204_GnR103 | 2019-05-12 |
| 5 | Frank Kern | B1204_GnR104 | 2019-09-18 |
| 6 | Andreas Frank| B1204_GnR104 | 2017-03-08 |
-----------------------------------------------
我尝试了子选择,但无法使其工作。
我尝试了以下语句,但收到错误消息。
SELECT DISTINCT company.name,
officer.name,
officer.start_date
FROM company
INNER JOIN officer ON company.company_number =
(SELECT officer.name,
DATE_FORMAT(officer.start_date, '%Y-%m-%d') AS date
FROM officer
WHERE company.company_number = officer.company_id
ORDER BY date
LIMIT 1)
输出应如下所示:
Company Name | Officer
----------------------------
Flower LLC | Fleece Gold
Marketing LLC| Frank Kern
因为这些人是最晚开始工作的人,并且是公司的现任高管。
但我收到一条错误消息“操作数应包含 1 列”。
非常感谢您的建议,谢谢!
最佳答案
您需要将您的company
和officer
表JOIN
到每个公司最大start_date
的派生表中得到你想要的结果:
SELECT c.name AS company,
o.name AS officer,
o.start_date
FROM company c
JOIN officer o ON o.company_id = c.company_number
JOIN (SELECT company_id, MAX(start_date) AS start_date
FROM officer
GROUP BY company_id) m ON m.company_id = o.company_id AND m.start_date = o.start_date
输出:
company officer start_date
Flower LLC Fleece Gold 2019-05-12 00:00:00
Marketing LLC Frank Kern 2019-09-18 00:00:00
关于MYSQL:根据日期仅返回每组的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252848/