我有一个如下表格,我想根据日期将日期时间条目分组,没有时间和班次,例如,早班时间从早上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
答案 0 :(得分:2)
我将示例数据保存在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()
表达式。但是,如果仍然没有产生您想要的结果,请告诉我们它返回的内容以及您想要返回的内容。