SQL简单组通过导致重复部分

时间:2013-06-24 12:45:04

标签: sql ms-access

我有一个导致我麻烦的SQL查询。我到目前为止的SQL如下:

SELECT Dated, [Level 1 reason], SUM(Duration) AS Mins
FROM Downtime
GROUP BY Dated, [Level 1 reason]

现在我遇到的问题是结果包含多种原因,而不是按照我的要求组合在一起。问题结果的一个例子如下:

1/2/2013 10:02:00 AM    Westport    2
1/2/2013 10:17:00 AM    Westport    9
1/2/2013 10:48:00 AM    Engineering 5
1/2/2013 11:01:00 AM    Facilities  6

预期的结果是,有一个Westport小组可以约会。查询还需要处理多个日期,但为了便于阅读,这些日期并未包含在代码段中。

感谢您的帮助。我知道这是一个简单的原因,但我无法理解。

**编辑:抱歉,我在Access中执行此操作。 按日期删除组会导致Access出错。我不确定该怎么做

  

“您尝试执行不包含指定的查询   表达式'作为聚合函数的一部分。“**

D Stanley用以下查询解决了我的问题

SELECT DateValue(Dated) AS Dated, [Level 1 reason], SUM(Duration) AS Mins
FROM Downtime
GROUP BY DateValue(Dated), [Level 1 reason]

3 个答案:

答案 0 :(得分:2)

在Access中,您可以使用DateValue功能从日期列中删除时间:

SELECT DateValue(Dated) Dated, [Level 1 reason], SUM(Duration) AS Mins
FROM Downtime
GROUP BY DateValue(Dated), [Level 1 reason]

答案 1 :(得分:0)

好像你想删除时间组件。如何做到这一点因数据库系统而异。在SQL Server中它将是:

SELECT DATEADD(day,DATEDIFF(day,0,Dated),0), [Level 1 reason],
       SUM(Duration) AS Mins
FROM Downtime
GROUP BY DATEADD(day,DATEDIFF(day,0,Dated),0), [Level 1 reason]

这是有效的,因为0可以隐式转换为日期(午夜01/01/1900),而DATEADDDATEDIFF仅适用于datepart的组成部分(此处) ,day)。那么,这是“自从01/01/1900午夜以来发生了多少天?”并且“让我们在午夜01/01/1900添加相同的天数” - 这给我们的日期与我们开始时的价值相同,但总是在午夜。


对于Access,我认为您必须引用datepart(day变为"d")。我不确定0隐式转换是否仍然有效 - 但您可以在我上面使用0的所有地方替换任何常量日期,例如:

SELECT DATEADD("d",DATEDIFF("d","01/01/1900",Dated),"01/01/1900"),
       [Level 1 reason],
       SUM(Duration) AS Mins
FROM Downtime
GROUP BY DATEADD("d",DATEDIFF("d","01/01/1900",Dated),"01/01/1900"),
         [Level 1 reason]

答案 2 :(得分:0)

我想访问它会是:

SELECT CDate(Int(Dated)) , [Level 1 reason],
   SUM(Duration) AS Mins
FROM Downtime
GROUP BY CDate(Int(Dated)) , [Level 1 reason];