从 4 列函数获取最新日期

Posted

技术标签:

【中文标题】从 4 列函数获取最新日期【英文标题】:Get latest date from 4 columns function 【发布时间】:2019-12-19 16:46:12 【问题描述】:

我有以下查询“qryE”。

Equipment   E1_45J          E2_45J         E3_45J      E4_45J
400         2019-03-25      2019-10-07  
401         2019-04-01      2019-10-23  
402         2019-02-14      2019-08-25                 2019-11-11
403         2019-02-11      2019-09-05     2019-11-25

我做了一个函数来返回这 4 列之间的最新值:

Function getmaxdate(dteDate1 As Date, dteDate2 As Date, dteDate3 As Date, dteDate4 As Date) As Date

    Dim dteMaxDate As Date

    dteMaxDate = dteDate1
    Debug.Print dteDate2
    If IsDate(dteDate2) Then
        If dteDate2 > dteMaxDate Then dteMaxDate = dteDate2
    If IsDate(dteDate3) Then
        If dteDate3 > dteMaxDate Then dteMaxDate = dteDate3
    If IsDate(dteDate4) Then
        If dteDate4 > dteMaxDate Then dteMaxDate = dteDate4
    getmaxdate = dteMaxDate

End Function

我想要实现的是:

 Equipment   45J          
 400         2019-10-07  
 401         2019-10-23  
 402         2019-11-11
 403         2019-11-25

但是,当我使用 45J 运行查询时:

getmaxdate([E1_45J],[E2_45J],[E3_45J],[E4_45J])

我得到 标准表达式中的数据类型不匹配。

我尝试使用以下命令强制我的查询值的格式:

45J: getmaxdate(Format([E1_45J], "yyyy/mm/dd"),Format([E2_45J], "yyyy/mm/dd"),Format([E3_45J], "yyyy/mm/dd"),Format([E4_45J], "yyyy/mm/dd"))

但是,我仍然遇到同样的错误。

我做错了什么?

【问题讨论】:

有空白值,访问是数据类型的坚持者,并且根据我的经验,空日期是有问题的。您需要检查每个空格,然后跳过它。 理想情况下,您需要一列作为日期,但如果您无法更改表设计,则可以使用 union all 来取消透视数据,然后在外部查询中使用然后使用 max 函数。 ***.com/questions/7255423/… 除了上述建议的 SQL 答案 - 对于潜在的纯 VBA 解决方案 - allenbrowne.com/func-09.html 【参考方案1】:

您可能会遇到类型不匹配,因为您将Null 传递给Date 参数,而您不能这样做。

更改函数的签名以接受 Variant 值而不是 Date - Variant 可以容纳 Null 值。

所有参数都定义为As DateIsDate 函数只能返回True

我建议不要假设date1 是一个有效日期,并将“最大日期”默认为CDate(0):如果记录中有任何日期,它会大于那个日期。

也要小心关闭 If...End If 块。

【讨论】:

【参考方案2】:

您可以在 qryE 上使用 SQL 来执行此操作,我的表是 tblTesting,所以您可以更改它。

select equipment,MAX(d) as mxDate from
(
SELECT 
equipment,
E1_45J as d from tblTesting 
UNION
SELECT 
equipment,
E2_45J as d  from tblTesting 
UNION
SELECT 
equipment,
E3_45J as d  from tblTesting
UNION
SELECT 
equipment,
E4_45J as d  from tblTesting
)
group by equipment

【讨论】:

以上是关于从 4 列函数获取最新日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:从最大日期/最新日期的记录中获取数据

对于每个 ID,返回 r 中开始列的最早日期和结束列的最新日期

Python - 获取最新日期列

js日期函数

js日期函数

pandas使用to_datetime函数将字符串时间数据列转化为时间对象数据列通过DatetimeProperties对象获取日期对象的年份信息(year)