MS-Access,基于值的两个日期之间的天数

时间:2016-10-12 05:22:04

标签: ms-access-2010

寻找有关两个日期之间计算的帮助,并以价值标准滚动。

我的表名为

  

ODB_AC_PN_TRANSACTION_HISTORY

并在前3列中设置如下。最后一栏是我正在寻找的。

我想根据PN列中的值知道记录的日期和上一个发生日期之间的天数

TRANSACTION (unique key)    PN              TRANSACTION_DATE    Days
16/07/0312:53:02:04800      02A0016-32      15/07/2003          0
5/08/200314:47:53:5960      002A0016-32     1/08/2003           17
9/09/200315:06:50:0550      002A0016-32     29/08/2003          28
18/10/0315:02:08:4540       002A0016-32     23/09/2003          25
25/11/0309:38:41:7440       002A0016-32     21/11/2003          59
18/12/0314:14:39:3560       002A0016-32     12/12/2003          21
19/09/200713:40:39:8870     0050N1          14/08/2007          0
15/10/200714:49:39:3590     0050N1          20/09/2007          37
13/11/200710:39:57:1200     0050N1          17/10/2007          27

提前致谢

2 个答案:

答案 0 :(得分:0)

我认为你有P / N的拼写错误 - 并且你的日期格式是基于你的系统格式。如果没有按正确顺序排序,则需要对年/月/日进行一些解析,然后使用DateSerial函数

Option Explicit

Public Sub UpdateTransactionDays()

    Dim rs                      As DAO.Recordset

    Dim strTransactionDate      As String
    Dim lngNumDays              As Long

    Dim strSQL                  As String
    Dim strLastPN               As String
    Dim strLastDate             As String

    strSQL = "SELECT * FROM InputTableName ORDER BY PN, TRANSACTION_DATE"

    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

    With rs
        Do While Not .EOF
            strTransactionDate = ![Transaction_Date]

            If strLastPN = !PN Then
                lngNumDays = DateDiff("d", strLastDate, strTransactionDate)
            Else
                ' First occurence
                lngNumDays = 0
            End If
            Debug.Print lngNumDays

            ' Update Num Days since last transaction
            .Edit
            ![Days] = lngNumDays
            .Update

            strLastDate = strTransactionDate
            strLastPN = !PN
            .MoveNext
        Loop
        .Close
    End With

    Set rs = Nothing
End Sub

答案 1 :(得分:0)

这可能是这样的查询:

SELECT
    TRANSACTION,
    PN,
    TRANSACTION_DATE,
        -DateDiff("d", TRANSACTION_DATE, 
            (Select Max(T.TRANSACTION_DATE) As PreviousDate
            From ODB_AC_PN_TRANSACTION_HISTORY As T
            Where 
                T.TRANSACTION_DATE < ODB_AC_PN_TRANSACTION_HISTORY.TRANSACTION_DATE
                And
                T.PN = ODB_AC_PN_TRANSACTION_HISTORY.PN)) As
    Days
FROM
    ODB_AC_PN_TRANSACTION_HISTORY 
ORDER BY
    PN Asc,
    TRANSACTION_DATE Desc