Sql 计算Access数据库中两条记录的天数差
我正在从一个非常复杂的Excel电子表格创建Access数据库。这个过程一直很顺利,直到我解决了这个问题。这个解决方案在Excel中很简单,但我不知道如何在Access中实现 以下是我以前在Excel中使用的内容 我在一张纸上有一个客户列表,上面有多个字段。然后,我用另一张表作为报告,运行VBA宏搜索所有客户的表,并按姓名列出每个客户,这些客户是我们的呼叫中心Que呼叫的入站呼叫,当该呼叫到来时,然后计算第三列呼叫间隔天数。最后一篇专栏文章就是我在翻译到Access时遇到困难的地方。在Excel中,我会让它做一些类似于单元格C3=SUMB3-B2的事情。考虑到该表如下所示:Sql 计算Access数据库中两条记录的天数差,sql,ms-access,Sql,Ms Access,我正在从一个非常复杂的Excel电子表格创建Access数据库。这个过程一直很顺利,直到我解决了这个问题。这个解决方案在Excel中很简单,但我不知道如何在Access中实现 以下是我以前在Excel中使用的内容 我在一张纸上有一个客户列表,上面有多个字段。然后,我用另一张表作为报告,运行VBA宏搜索所有客户的表,并按姓名列出每个客户,这些客户是我们的呼叫中心Que呼叫的入站呼叫,当该呼叫到来时,然后计算第三列呼叫间隔天数。最后一篇专栏文章就是我在翻译到Access时遇到困难的地方。在Excel
Column A Column B Column C
Row 1 Name Date Time Lapse
Row 2 Customer 1 7/1/2019 ----------
Row 3 Customer 2 7/2/2019 =SUM(B3-B2) <-- 1 day
Row 4 Customer 3 7/4/2019 =SUM(B4-B3) <-- 2 days
准确描述它是如何工作的错误消息、意外结果等
它只是列出了客户,不允许我计算创建记录的时间(即首次联系客户的时间)之间的差异。我在网上发现了很多关于如何计算同一条记录的两列之间的差异的东西,而不是两条不同记录之间的差异;也不是两个不同的记录,它们可能不是顺序排列的,因为客户表中的记录之间可能有其他非Que Call客户
描述期望的结果
我想在期末报告中有一个专栏,显示两次通话记录间隔了多少天
提前感谢您的任何意见 考虑一个相关的聚合子查询,其中来自同一个源Customer的内部查询通过假定为唯一标识符的相同ID与外部查询相关联,并假定创建了日期比较字段。请注意,在相关性中使用了表别名、c和sub 使用DateDiff表示日期之间的差异。要使用此查询,请将下面的查询置于查询设计器的SQL模式中,并将要用作记录源的对象保存到窗体、报表、单独打开的或在应用程序代码中用作记录集的对象
SELECT
c.FullName,
c.ID,
c.QueCall,
c.Status,
c.InterestLevel,
c.State,
c.Product,
c.Created,
c.LastContact,
c.PrimaryNote,
(SELECT TOP 1 SUM(DateDiff("d", sub.Created, c.Created))
FROM Customer sub
WHERE sub.ID = c.ID
AND sub.Created < c.Created
GROUP BY sub.Created
ORDER BY sub.Created DESC) AS TimeElapsed
FROM
Customers c
WHERE
(((c.QueCall)=True));
ORDER BY
c.Created;
请注意,对于大型表,此相关子查询可能会在时间和性能上造成负担。请留出时间来完成,并考虑将输出存储在临时表中,以避免重新运行。谢谢。这似乎很管用!最后一句话是添加另一个表来保存这些数据,这是一个好主意。目前有800多个客户,只是随着时间的推移而增长。我可以看到每次刷新报告时,这将变得多么费力。我认为OP想要两个客户之间的时间,而不是两个联系人到同一个客户之间的时间,所以只需要where sub.ID
SELECT
c.FullName,
c.ID,
c.QueCall,
c.Status,
c.InterestLevel,
c.State,
c.Product,
c.Created,
c.LastContact,
c.PrimaryNote,
(SELECT TOP 1 SUM(DateDiff("d", sub.Created, c.Created))
FROM Customer sub
WHERE sub.ID = c.ID
AND sub.Created < c.Created
GROUP BY sub.Created
ORDER BY sub.Created DESC) AS TimeElapsed
FROM
Customers c
WHERE
(((c.QueCall)=True));
ORDER BY
c.Created;