使用MS Access查询查找给定日期的下一个匹配项

时间:2016-06-21 14:56:14

标签: sql ms-access

我目前正在开发一个存储软件许可信息的数据库,例如软件名称,购买日期,成本,数量等......在软件拥有12个月后,我们必须支付维护费。

因此,我的问题是如何设计一个查询,该查询将采用购买日期并计算该日期的下一次出现,以存储在维护日期字段中。例)如果在12/31/1999购买了许可证,我需要在2016年12月31日支付维护费用。

我没有很多MS Access或SQL查询的经验,经过一段时间的研究后,我甚至不确定这是否可行。我很感激你们给我的任何帮助!

3 个答案:

答案 0 :(得分:1)

这是一个完全符合要求的功能:

Public Function DateNextAnnualDay( _
    ByVal AnnualDay As Date) _
    As Date

    Dim SomeDate        As Date
    Dim NextAnnualDay   As Date
    Dim Years           As Integer

    SomeDate = Date

    NextAnnualDay = AnnualDay
    Years = DateDiff("yyyy", AnnualDay, SomeDate)
    If Years < 0 Then
        ' Don't calculate hypothetical annual days.
    Else
        NextAnnualDay = DateAdd("yyyy", Years, AnnualDay)
        If DateDiff("d", SomeDate, NextAnnualDay) <= 0 Then
            ' Next annual day falls earlier in the year than SomeDate.
            NextAnnualDay = DateAdd("yyyy", Years + 1, AnnualDay)
        End If
    End If

    DateNextAnnualDay = NextAnnualDay

End Function

答案 1 :(得分:0)

这是语法

SELECT DateAdd("yyyy",1,[MyDate]) AS MaintDate
FROM Table;

答案 2 :(得分:0)

如果需要进行更复杂的查询,可以在模块中编写函数,然后使用VBA在查询中访问它。例如,您可以遍历循环以匹配条件

Function GetNextDate(ByVal dteOriginalDate As Date) As Date

While dteOriginalDate <= DateTime.Now

    dteOriginalDate = DateAdd("Yyyy", 1, dteOriginalDate)

Wend

GetNextDate = dteOriginalDate

End Function

将迭代从原始日期添加一年到将来的日期。您可以将其构建为查询(使用右键单击 - &gt;构建),以便每行都运行代码并应用逻辑。

这将允许您将原始许可日期存储在数据库中,并计算下一个截止日期,而无需知道(或修改)中间年份。