[英]Two tables - SELECT TOP from one of the tables for each row in second table
我有一个使用两个表的报告。
tblContacts
tblCalls
我想拉从TOP 1 tblCalls
在每一行tblContacts
。 我不太确定该怎么做。 我尝试使用JOINS,但从逻辑上讲对我有意义的唯一方法是,我得到一个错误提示,告诉我这是一个模棱两可的OUTER JOIN。 因此,我尝试进行两个不同的查询来完成此操作,最后,它仍然仅将BOTH表的TOP 1拉高,因此我不确定自己出了什么问题。
我已经尝试了许多不同的SQL语句,即使它不起作用,但这也是我到目前为止最接近的 (TOP 1根本不起作用):
SELECT tblCalls.ID, tblCalls.[Call Time], tblCalls.NextContact, tblCalls.Subject, tblCalls.Notes, [First Name] & " " & [Last Name] AS FullName, tblContacts.[Mobile Phone], tblContacts.[Home Phone], tblContacts.[E-mail Address]
FROM tblCalls INNER JOIN tblContacts ON tblCalls.Contact = tblContacts.ID
GROUP BY tblCalls.ID, tblCalls.[Call Time], tblCalls.NextContact, tblCalls.Subject, tblCalls.Notes, [First Name] & " " & [Last Name], tblContacts.[Mobile Phone], tblContacts.[Home Phone], tblContacts.[E-mail Address];
这显示了tblCalls
中的所有Call记录。 当我将查询调整为显示TOP 1时,显然只显示了一条记录。
另外,以防万一这成为tblContacts
的问题,我在tblContacts
添加了一个“ Archive”列,而那些被指定为“ True”的记录根本不会在此报告中列出。 这部分应该很容易,但是以防万一以后可能会破坏某些东西,我想我将它添加到问题中。
谢谢!
获得每个联系人的最后一个电话的一种方法是使用NOT EXISTS
:
SELECT c.* FROM tblCalls c
WHERE NOT EXISTS(
SELECT 1 FROM tblCalls cc
WHERE cc.Contact = c.Contact AND cc.[Call Time] > c.[Call Time]
)
因此,您可以将其加入表格:
SELECT
c.ID, c.[Call Time], c.NextContact, c.Subject, c.Notes,
t.[First Name] & " " & t.[Last Name] AS FullName,
t.[Mobile Phone], t.[Home Phone], t.[E-mail Address]
FROM tblContacts t LEFT JOIN (
SELECT c.* FROM tblCalls c
WHERE NOT EXISTS(
SELECT 1 FROM tblCalls cc
WHERE cc.Contact = c.Contact AND cc.[Call Time] > c.[Call Time]
)
) c ON c.Contact = t.ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.