MYSQL:根据日期仅返回每组的最新记录

标签 mysql subquery greatest-n-per-group

我有两张 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 列”。

非常感谢您的建议,谢谢!

最佳答案

您需要将您的companyofficerJOIN到每个公司最大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

Demo on dbfiddle

关于MYSQL:根据日期仅返回每组的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58252848/

相关文章:

sql - mysql存储函数参数

java - CURDATE() NOT IN(在 CheckIn 和 CheckOut 之间选择 CURDATE() 的房间)

mysql - 如何在不使用嵌套查询的情况下解决未知别名列问题?

MySQL 从子查询中提取列以将其附加到主列

mysql - 获取mysql中具有最大列值的行

mysql - 无法从 node.js 服务器连接到本地主机数据库

mysql - 查询的 Grails HQL 表示

mysql - 通过子查询插入多行

MySQL 使用 max 选择详细信息

php - 按不按日期顺序返回结果进行分组