很难获得冠军......几乎在我的绳索结束时,希望有人会帮助我。发布了类似的问题,但似乎很少涉及联合表/我在该领域的有限技能。
我有两张桌子 - 客户和面试。
- clients--
id / first_name / surname / practitioner_id / status
- interviews--
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工作方式的限制,但我不能为我的生活让subquerys工作,以便事先对它进行排序。
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下的最新日期并不总是&#34;最新&#34;,我们可以假设与该客户端的最高i.id相关的日期将是相关的最新日期,因为它是最近一次面试的输入审核日期。
我知道max()但是却无法以相关客户端返回max(i.id)的方式实现它,而不是在这种情况下给我平坦的最大值 - 62。我怀疑这是子查询应该处理的关键。
我已经在这一段时间了,创造了上述更复杂的代码版本。不是我的地区继承了这个项目,但必须充分利用它。我确定在我的许多次尝试中已经接近但我不得不张贴白旗 - 有人可以帮忙吗?
编辑 - 更新,因为我有一些错误顺序的返回字段
答案 0 :(得分:0)
导出一个仅包含每个客户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