匹配Microsoft Access中的特定数据

时间:2016-10-04 18:24:40

标签: sql ms-access relational-database match

在Microsoft Access中,我有一张付款表和一张表,其中包含了收集人员的承诺。

enter image description here

我想通过id(和日期)向与债务人达成协议的最后一位收款官分配到付款表。

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

同样,对于id 5425,最后的承诺是由Marie Anne做出的,因为2016年10月23日(付款日期)是在2016年10月12日至2016年10月26日(承诺日期)之间。

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

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

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

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

1 个答案:

答案 0 :(得分: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);

想出来:

Screenshot of query results