Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Access查询神秘地忽略记录_Sql_Ms Access - Fatal编程技术网

Sql Access查询神秘地忽略记录

Sql Access查询神秘地忽略记录,sql,ms-access,Sql,Ms Access,我有一个MS Access联系人和通信数据库,包括一个“联系人”表(姓名、电话、电子邮件等)和一个“呼叫”表(联系人、传入/传出、时间、介质、备注等)。这些表在Contacts.ID=Calls.Contact上链接 例如: NAME NUMBER EMAIL Michaelangelo 123-4567 M@TMNT.com Donatelo 123-4567 d@TMNT.com Leonardo 123-4567

我有一个MS Access联系人和通信数据库,包括一个“联系人”表(姓名、电话、电子邮件等)和一个“呼叫”表(联系人、传入/传出、时间、介质、备注等)。这些表在Contacts.ID=Calls.Contact上链接

例如:

NAME            NUMBER      EMAIL
Michaelangelo   123-4567    M@TMNT.com
Donatelo        123-4567    d@TMNT.com
Leonardo        123-4567    L@TMNT.com
Raphael         123-4567    R@TMNT.com

CONTACT         TIME        IN/OUT
Michaelangelo   1/1/2019    Outgoing
Michaelangelo   1/15/2019   Incoming
Michaelangelo   2/1/2019    Outgoing
Michaelangelo   3/1/2019    Outgoing
Leonardo        1/1/2019    Outgoing
Leonardo        2/1/2019    Outgoing
Michaelangelo   3/15/2019   Incoming
我正试图构建一个查询来报告所有联系人信息(就像直接打开表一样),但有一个字段显示最近的传入和传出通信

因此,对于上述数据:

NAME            LAST OUT    LAST IN     NUMBER      EMAIL
Michaelangelo   3/1/2019    3/15/2019   123-4567    M@TMNT.com
Donatelo                                123-4567    d@TMNT.com
Leonardo        2/1/2019                123-4567    L@TMNT.com
Raphael                                 123-4567    R@TMNT.com
因此,结果将独立地识别传入和传出类型的通信记录的最新日期,并在尚未存在此类通信类型的地方返回[nulls]

我有一个查询,大部分是有效的。然而,它似乎神秘地忽略了某些“调用”中没有记录的记录。请注意,并非所有这些记录

我现有的有问题的代码如下所示。我还尝试在连接中移动WHERE语句(在启用之前);我已尝试通过调用打开WHERE语句。时间为NULL或调用\u 1。时间为NULL或… ,以及WHERE语句的其他几个版本

以下是现有的查询:

SELECT Contacts.Name_First, Contacts.Name_Last, Max(Calls.Time) AS [Last Incoming], Max(Calls_1.Time) AS [Last Outgoing]
FROM (Contacts 
LEFT OUTER JOIN Calls AS Calls_1 ON Contacts.ID = Calls_1.Contact ) 
LEFT OUTER JOIN Calls ON Contacts.ID = Calls.Contact 
WHERE (
(((Calls.Outgoing_Incoming)="Incoming")  OR  Calls.Outgoing_Incoming IS NULL)
AND 
(((Calls_1.Outgoing_Incoming)="Outgoing") OR Calls_1.Outgoing_Incoming IS NULL)
)
GROUP BY Contacts.Name_First, Contacts.Name_Last;
完整的“联系人”表有361条记录。预期结果是将返回所有361条记录,无论它们是否在“调用”中有相应的记录

事实上,只返回了208条记录。其中许多没有相应的“调用”记录,告诉我OR NULL语句正在工作,至少部分是这样。我找不到省略的记录与返回的记录之间有任何一致的区别。

在执行
联接之前进行聚合。那么您只需要聚合一次:

SELECT c.Name_First, c.Name_Last, ca.Last_Incoming, ca.Last_Outgoing
FROM Contacts as c LEFT OUTER JOIN
     (SELECT Contact,
             MAX(IIF(Outgoing_Incoming IS NULL OR Outgoing_Incoming = "Incoming", Time, NULL)) as Last_Incoming,
             MAX(IIF(Outgoing_Incoming IS NULL OR Outgoing_Incoming = "Outgoing", Time, NULL)) as Last_Outgoing,
      FROM Calls 
      GROUP BY Contact
     ) as ca
     ON c.ID = c.Contact ;

示例数据、期望的结果以及对查询应该做什么的解释都会有所帮助。谢谢@GordonLinoff,done。