Mysql 使用单独的索引组合两个查询

Mysql 使用单独的索引组合两个查询,mysql,Mysql,我有两个查询从两个不同的表中提取数据,但我需要它们提取同一个报表。它们之间有一个共享键,第一个表有一个条目对应于第二个表中的多个条目 我的第一个问题是: SELECT Proposal_ID, substr(Proposal_Name, 1, 3) AS Prefix, substr(Proposal_Name, 4, 6) AS `Number`, Institution, CollegeCode, DepartmentCode, Propose

我有两个查询从两个不同的表中提取数据,但我需要它们提取同一个报表。它们之间有一个共享键,第一个表有一个条目对应于第二个表中的多个条目

我的第一个问题是:

SELECT Proposal_ID,
    substr(Proposal_Name, 1, 3) AS Prefix,
    substr(Proposal_Name, 4, 6) AS `Number`,
    Institution,
    CollegeCode,
    DepartmentCode,
    Proposer_FirstName,
    Proposer_LastName

FROM proposals.proposal
WHERE Institution = 'T';
样本数据:

+----+--------+--------+-------+----------+----------+-----------+----------+
| ID | Prefix | Number | Inst. | CollCode | DeptCode | FirstName | LastName |
+----+--------+--------+-------+----------+----------+-----------+----------+
| 18 | SYP    | 4675   | T     | AS       | SOC      | Linda     | McGaff   |
+----+--------+--------+-------+----------+----------+-----------+----------+
| 20 | GEO    | 4340   | T     | AS       | SGS      | Teddy     | Graham   |
+----+--------+--------+-------+----------+----------+-----------+----------+
+-----------------+-------------+----------------------+
| Parent_Proposal | Status_Code | Status_Time          |
+-----------------+-------------+----------------------+
| 18              | 40          | 2016-11-09 06:30:35  |
+-----------------+-------------+----------------------+
| 20              | 11          | 2017-03-20 10:26:31  |
+-----------------+-------------+----------------------+
我的第二个问题:

SELECT Parent_Proposal,
    SUBSTRING_INDEX(GROUP_CONCAT(`status`.`Status_Code` ORDER BY `status`.`Status_Time` DESC), ',', 1) AS status_code,
    SUBSTRING_INDEX(GROUP_CONCAT(`status`.`Status_Time` ORDER BY `status`.`Status_Time` DESC), ',', 1) AS status_timestamp
FROM proposals.`status`    
GROUP BY `status`.Parent_Proposal
样本数据:

+----+--------+--------+-------+----------+----------+-----------+----------+
| ID | Prefix | Number | Inst. | CollCode | DeptCode | FirstName | LastName |
+----+--------+--------+-------+----------+----------+-----------+----------+
| 18 | SYP    | 4675   | T     | AS       | SOC      | Linda     | McGaff   |
+----+--------+--------+-------+----------+----------+-----------+----------+
| 20 | GEO    | 4340   | T     | AS       | SGS      | Teddy     | Graham   |
+----+--------+--------+-------+----------+----------+-----------+----------+
+-----------------+-------------+----------------------+
| Parent_Proposal | Status_Code | Status_Time          |
+-----------------+-------------+----------------------+
| 18              | 40          | 2016-11-09 06:30:35  |
+-----------------+-------------+----------------------+
| 20              | 11          | 2017-03-20 10:26:31  |
+-----------------+-------------+----------------------+
我基本上需要根据Status_时间戳提取最新的Status_代码和Status_时间戳,然后将其与第一个表中的Parent_Proposal列相关联

有没有一种方法可以将结果的子集分组而不将所有数据分组在一起

预期结果:

+----+--------+--------+-------+----------+----------+-------+--------+-------------+----------------------+
| ID | Prefix | Number | Inst. | CollCode | DeptCode | FName | LName  | Status_Code | Status_Time          |
+----+--------+--------+-------+----------+----------+-------+--------+-------------+----------------------+
| 18 | SYP    | 4675   | T     | AS       | SOC      | Linda | McGaff | 40          | 2016-11-09 06:30:35  |
+----+--------+--------+-------+----------+----------+-------+--------+-------------+----------------------+
| 20 | 11     | GEO    | 4340  | AS       | SGS      | Teddy | Graham | 11          | 2017-03-20 10:26:31  |
+----+--------+--------+-------+----------+----------+-------+--------+-------------+----------------------+

感谢您的帮助和见解

我想你想要这个。只需将两个表连接在一起,然后对
status
表上的子查询进行附加连接,以查找每个父提案的最新记录

SELECT
    p.Proposal_ID,
    SUBSTR(p.Proposal_Name, 1, 3) AS Prefix,
    SUBSTR(p.Proposal_Name, 4, 6) AS Number,
    p.Institution,
    p.CollegeCode,
    p.DepartmentCode,
    p.Proposer_FirstName,
    p.Proposer_LastName,
    s1.Status_Code,
    s1.Status_Time 
FROM proposals.proposal p
LEFT JOIN proposals.status s1
    ON p.ID = s1.Parent_Proposal
INNER JOIN
(
    SELECT Parent_Proposal, MAX(Status_Time) AS Max_Status_Time
    FROM proposals.status
    GROUP BY Parent_Proposal
) s2
    ON s1.Parent_Proposal = s2.Parent_Proposal AND s1.Status_Time = s2.Max_Status_Time
WHERE
    p.Institution = 'T';

一些示例数据会很好,并解释这两个表是如何通过数据关联的。@TimBiegeleisen我已经用示例数据更新了这个问题。第一个表的“ID”对应于第二个表的“Parent_Proposition”好的,您就快到了。现在,只要向我们展示基于这些数据的预期输出,您就可以开始了。谢谢,这正是我想要的!我不知道你可以在一个连接中进行子选择。