在联接查询中查找最新记录


Finding the most recent record in a joined query

我有一个MySQL关系数据库,它将客户存储在一个表中,然后是另一个存储与他们的各种联系人/对话/参与的表。请参阅下面的 examplar 架构:

客户customerId
名字

联系人
contactId
customerId
对应描述
联系日期

我需要能够查询数据库并能够访问我们与他们联系的最近时间的日期(联系日期)。我在这里看到了其他一些问题,但我似乎找不到适合我需求的问题。

谁能帮忙?非常感谢。

当然,这是一个起点。您需要按客户 ID 对联系人进行分组,因此我将从以下内容开始:

SELECT
    MAX(contactDate), customerId
FROM
    Contacts
GROUP BY
    customerId

从那里,您可以LEFT JOIN到您的客户表,您将能够看到每个客户的最后联系日期。如果您确定每个客户至少有一个联系人,则可以将其换成 INNER JOIN ,这应该会加快速度。

尝试以下查询:

检索所有客户的最新联系人日期(将所有客户显示为列表时):

SELECT Customers.*, max(Contacts.contactDate) as Most_Recent
from Customers left join Contacts
ON Customers.customerId = Contacts.customerId
GROUP BY Customers.customerId
ORDER BY Most_Recent desc

要检索客户最近的联系人日期(将 ID 1 更改为客户的 ID),请执行以下操作:

SELECT Customers.*, Contacts.contactDate as Most_Recent
from Customers left join Contacts
ON Customers.customerId = Contacts.customerId
where Customers.customerId = 1
ORDER BY Most_Recent desc

我通常鼓励人们明确命名列,而不是使用显式连接语法 - 某些版本的MySQL会做愚蠢的事情。 聚合通常比执行有限制的订单慢,所以我会这样做:

    select customerId, forename, surname, contactId, correspondenceDescription, contactDate
        from customer, contacts
        where customer.customerId = contacts.customerId
        and customer.customerId = ?
        order by contactDate desc
        limit 0,1