1

我有一个如下表,我想根据没有时间和班次的日期对日期时间条目进行分组,例如,早班从早上 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       
4

1 回答 1

2

我将您的示例数据保存在我的 Access 2007 数据库中的一个表中。但是当我尝试运行您的查询时,Access 抛出了一个关于 alias 的错误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()表达。但是,如果这仍然不能产生您想要的结果,请向我们展示它返回的内容以及您想要返回的内容。

于 2013-04-03T17:24:13.707 回答