【问题标题】:How to use MIN, IFF and Datepart functions together in MS ACCESS?如何在 MS ACCESS 中同时使用 MIN、IFF 和 Datepart 函数?
【发布时间】:2013-04-03 11:19:37
【问题描述】:

我有一个如下表,我想根据没有时间和班次的日期对日期时间条目进行分组,例如,早班从早上 5 点开始,到下午 14 点结束。在这里,MAX函数找到正确的日期,你能帮我看看MIN函数有什么问题吗?

    Indate                Incondition
    ---------             -----------
    25.01.2013 05:00:38    KT-RING
    25.01.2013 05:21:52    KT-EMPTY
    25.01.2013 05:22:00    KT-PROCESS
    25.01.2013 06:10:50    KT-RING
    25.01.2013 16:10:50    KT-EMPTY
    26.01.2013 06:10:50    KT-RING

    SELECT  Int(Indate) AS DATE,  
    Min( IIf( ( DatePart('h',[Indate])>=05 AND DatePart('h', [Indate])<13), Indate, 0)) AS FRUHRINGMIN,
    Max(IIf((DatePart('h',Indate)>=05 And
    DatePart('h',Indate)<13), Indate,0)) AS FRUHRINGMAX 
FROM  TABLE WHERE Incondition= 'KT-RING' 
    GROUP BY Int(Indate);

    RESULT:
    DATE      FRUHRINGMIN     FRUHRINGMAX
    -----     -------------   -----------
   25.01.2013  00:00:00       25.01.2013 06:10:50 
   26.01.2013  00:00:00       26.01.2013 06:10:50       

【问题讨论】:

    标签: sql ms-access datepart


    【解决方案1】:

    我将您的示例数据保存在我的 Access 2007 数据库中的一个表中。但是,当我尝试运行您的查询时,Access 抛出了一个关于别名 DATE 的错误,这是一个保留字。将该别名括起来允许查询运行而不会出错。

    SELECT
        Int(Indate) AS [DATE],  
        Min(IIf((DatePart('h',[Indate])>=05 AND DatePart('h', [Indate])<13), Indate, 0)) AS FRUHRINGMIN,
        Max(IIf((DatePart('h',Indate)>=05 And DatePart('h',Indate)<13), Indate,0)) AS FRUHRINGMAX 
    FROM tblJeanneQuadel
    WHERE Incondition= 'KT-RING' 
    GROUP BY Int(Indate);
    

    但是它给我的结果与你报告的不符。

    DATE  FRUHRINGMIN           FRUHRINGMAX
    41299 1/25/2013 5:00:38 AM  1/25/2013 6:10:50 AM
    41300 1/26/2013 6:10:50 AM  1/26/2013 6:10:50 AM
    

    请注意,我的日期/时间值采用美国格式,但它们实际上基于与您相同的值,只是显示方式不同。

    我不明白为什么您的查询结果将第一列显示为日期,而不是像我的那样显示为长整数,并且我希望这是来自Int(Indate) 的结果。但这是次要的。如果需要,我们可以从一种转换为另一种。

    更重要的是,我不确定实际发生了什么。如果括号 [DATE] 不允许您的查询运行并产生正确的结果,请尝试将 IIf() 条件移动到 WHERE 子句中。这将大大简化您的 Min()Max() 表达式。但是,如果这仍然不能产生您想要的结果,请向我们展示它返回的内容以及您想要返回的内容。

    【讨论】:

    • 非常感谢。我必须澄清它实际上是德语中的[Datum],那里没有问题。我使用 Int(Indate) 来显示没有时间的日期值,与我上面的问题中显示的完全一样。我想,我不能在 where 中使用 IIF,因为我想添加其他班次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多