比较字段并将最新日期与一个表

时间:2017-03-02 19:28:12

标签: sql vba access

下午,

我正在处理一组记录,这些记录列出了附加到默认项目代码的信用卡交易。第一步是导入填充tblMaster的记录。 30天后的第二步是将下一组记录附加到tblMaster。如果记录已移至项目代码,则它不会在此记录集中。如果记录未被移动到项目代码,它将保留在默认项目代码列表中,这意味着您最终得到两个记录,并且它们之间唯一不同的是报告日期等于日期报告已运行,新记录将附加到tblMaster。

我想排队以确保我们拥有相同记录的字段是empName(员工姓名) 量 项目日期 refNum(交易参考编号) 报告日期

我遇到的问题是如果empName,amount,item date,refNum都相同的逻辑,则保留两个报告日期中的较晚者。我想通过将名为matchRec的布尔框标记为true来摆脱早期的报告日期。这将过滤掉我的记录集中的记录,但我仍然可以将其用于历史目的。

到目前为止,我已经想到了代码:

 Dim db  As DAO.Database
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset

    Dim criteria As String

    Set db = CurrentDb

    Set rs1 = db.OpenRecordset("Select * From tblMaster Where matchRec = False Order By ID")
        Set rs2 = db.OpenRecordset("Select * From tblMaster Where matchRec= False Order By ID")


    Debug.Print

    While Not rs1.EOF
        criteria = _
            "empName = '" & rs1!empName.Value & "' And " & _
            "Quantity = " & Str(-rs1!Quantity.Value) & " And " & _
            "reportDate = '" & rs1!reportDate.Value & "' And " & _
            "matchRec = False"
        rs2.FindFirst criteria
        If rs2![reportDate] = rs1![reportDate] Then
                rs1!matchRec.Value = True
            rs1.Update
            rs2.Edit
                rs2!matchRec.Value = True
            rs2.Update
        End If
        rs1.MoveNext
    Wend
    rs2.Close
    rs1.Close

    Set rs2 = Nothing
    Set rs1 = Nothing
    Set db = Nothing

End Sub

1 个答案:

答案 0 :(得分:0)

我认为你需要的只是一个这样的查询。我怀疑你的[RefNum]是独一无二的,所以你可能不需要再加入,但我可能会弄错。如果[refNum]单独没有唯一标识行,则根据需要将剩余列添加到连接

UPDATE tblMaster a
Set matchRec = True
WHERE EXISTS (
SELECT 1
FROM tblMaster b
WHERE a.refNum = b.refNum
     and b.ReportDate > a.ReportDate
)