我有一个MySQL关系数据库,它将客户存储在一个表中,然后是另一个存储各种联系人/对话/交互的表。请参阅下面的示例模式:
客户的
客户ID
用名字
姓
联系人的
使用ContactID
客户ID
correspondenceDescription
contactDate
我需要能够查询数据库并能够访问我们与他们联系的最近时间的日期(contactDate)。我在这里看到了其他几个问题,但我似乎找不到符合我需要的问题。
有人可以帮忙吗?非常感谢。
答案 0 :(得分:1)
当然,这是一个起点。您需要按客户ID分组联系人,所以我从这开始:
SELECT
MAX(contactDate), customerId
FROM
Contacts
GROUP BY
customerId
从那里,您可以LEFT JOIN
到您的客户表,并且您将能够看到针对每个客户的最后联系日期。如果您确定每个客户至少有一个联系人,您可以将其换成INNER JOIN
,这可能会加快速度。
答案 1 :(得分:1)
尝试以下查询:
要检索所有客户的最新contactDate(当您将所有客户显示为列表时):
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
要检索客户的最新contactDate(使用您客户的ID更改ID 1):
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
答案 2 :(得分:0)
我通常会鼓励人们将列明确命名,而不是使用显式连接语法 - 某些版本的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