很难命名……我几乎已经束手无策了,希望有人能帮助我。有类似的问题发布,但似乎很少涉及连接表/我在这方面的技能有限。
我有 2 张 table - 客户和采访。
--客户--
id/名字/姓氏/从业者_id/状态
--采访--
id/client_id/planned_review_date
我的目标是完成看似简单的任务,即返回当前登录的从业者即将到来的面试日期列表。
我可以使用以下代码返回所有日期 -
SELECT c.id,
c.first_name,
c.surname,
i.planned_review_date,
i.id AS IntID
FROM clients AS c
INNER JOIN interviews AS i
ON c.id=i.client_id
WHERE c.practitioner_id = 18
AND c.status <> 'Archived'
ORDER BY i.id DESC
这给了我类似的东西 -
id first_name surname planned_review_date IntID
20 Terry Stamp 2016-04-01 00:00:00 62
20 Terry Stamp 2016-03-01 00:00:00 61
19 Iam More 2016-07-01 15:47:57 60
19 Iam More 2016-08-20 00:00:00 59
10 Steve Powers 2016-04-20 00:00:00 58
10 Steve Powers 2015-03-20 00:00:00 57
我只需要为每个客户显示一个日期,以便进行下一次面试,我将他们分组
GROUP BY c.id
正如我所料,这会导致一个缩减列表,每个客户一行。然而,实际返回的日期不是最新日期(即与该客户端的最高 i.id 关联的日期)。我知道这是由于 GROUP BY 工作方式的限制,但我一生都无法让子查询工作以预先对其进行排序。
id first_name surname planned_review_date IntID
20 Terry Stamp 2016-03-01 00:00:00 61
19 Iam More 2016-08-20 00:00:00 59
10 Steve Powers 2016-04-20 00:00:00 58
我需要上述详细信息,但 IntID 为 62,60 和 58。即我需要返回的是 -
id first_name surname planned_review_date IntID
20 Terry Stamp 2016-04-01 00:00:00 62
19 Iam More 2016-07-01 15:47:57 60
10 Steve Powers 2016-04-20 00:00:00 58
请注意 - i.planned_review_date 下的最新日期并不总是“最新”,我们可以假设与该客户的最高 i.id 相关的日期将是相关的最新日期,因为它是输入审核日期在最近一次采访中。
我了解 max(),但无法以返回关联客户端的 max(i.id) 的方式实现它,而不是在本例中给我平坦的 max - 62。我怀疑这是子查询应该处理的关键。
我已经在这方面工作了一段时间,创建了上述代码的更复杂的代码版本。不是我的领域继承了这个项目,但必须充分利用它。我确信我在很多很多次尝试中都已经很接近了,但我不得不举起白旗 - 有人可以帮忙吗?
编辑 - 更新,因为我有一些返回的字段顺序错误
最佳答案
派生一个仅包含每个客户端 ID 的最大日期的子集,然后将其连接回您的查询:假设planned_Review_date 是您要查找的“最新”数据。
子查询返回 Client_ID 和最大计划日期。通过将其内部连接回您的基本集,我们将该集限制为仅适用于具有该最大日期的记录。
SELECT c.id,
c.first_name,
c.surname,
i.planned_review_date,
i.id AS IntID
FROM clients AS c
INNER JOIN interviews AS i
ON c.id=i.client_id
INNER JOIN (SELECT Client_ID, max(Planned_review_Date) MD
FROM interviews
GROUP BY client_ID) I2
on I2.Client_ID = I.Client_ID
and I2.MD = I.Planned_Review_Date
WHERE c.practitioner_id = 18
AND c.status <> 'Archived'
ORDER BY i.id DESC
关于MYSQL - 返回结果 GROUP BY 并从连接表中获取最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596372/