【问题标题】:Match specific data in Microsoft Access匹配 Microsoft Access 中的特定数据
【发布时间】:2016-10-05 04:07:07
【问题描述】:

在 Microsoft Access 中,我有一张付款表和一张收款员做出的承诺表。

我想通过 ID(和日期)将与债务人达成协议的最后一个收款员分配到付款表。

例如:在 id 1111 上有两个承诺:由 Morticia Adams 和 Gulliver;但我选择 Gulliver 是因为他在该日期范围内做出了最后一个承诺,并考虑了付款日期。

同样,对于 id 5425,最后一个承诺是由 Marie Anne 做出的,因为 23.10.2016(付款日期)介于 12.10.2016 和 26.10.2016(承诺日期)之间。

这已经在 Excel 中完成here,但需要在 Microsoft Access 中完成,因为我有一个巨大的表格,而 Excel 需要很长时间来处理信息。

作为一个想法,它必须满足以下条件:

  • promise 表中行的支付 ID 等于支付表中的支付 ID。
  • 付款日期大于或等于通话日期。
  • 付款日期小于或等于约定的付款日期。

如果有人能给我一个提示,我将非常感激。

【问题讨论】:

  • 这不是您“雇用”某人来帮助您的工作委员会。您编写代码,我们(也许)尝试帮助修复它。
  • 这不是一个简单的内部连接,我不知道该怎么做。也许你可以给我一个提示 Marc B.

标签: sql ms-access relational-database match


【解决方案1】:

理想情况下,您会使用内部连接将查询拆分为两个查询,但您也可以使用一个。

使用这个:

SELECT [Payments Table].ID, [Payments Table].[Date of Payment], [Payment Promises Table].[Collection Officer]
FROM ([Payments Table] 
    INNER JOIN 
        ( SELECT [Payments Table].ID, Max([Payment Promises Table].[Date of conversation]) AS LastDate
        FROM [Payments Table] INNER JOIN [Payment Promises Table] ON [Payments Table].ID = [Payment Promises Table].ID
        WHERE ((([Payments Table].[Date of Payment]) Between [Date of Conversation] And [Date Agreed to Pay]))
        GROUP BY [Payments Table].ID) AS FindOfficer
    ON [Payments Table].ID = FindOfficer.ID) 
INNER JOIN [Payment Promises Table] 
ON (FindOfficer.LastDate = [Payment Promises Table].[Date of conversation]) 
AND (FindOfficer.ID = [Payment Promises Table].ID);

想出这个:

【讨论】:

  • 你是个天才!谢谢!
  • 很高兴它对你有用。当您很好地描述您的数据和目标时,它会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多