2013-06-24 23 views
0

我有一個SQL查詢,造成我的麻煩。那我至今的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 

預期的結果是,還有單韋斯特波特組日期。該查詢還需要處理多個日期,但這些日期並未包含在片段中以提高可讀性。

感謝您的任何幫助。我知道這是一個簡單的原因,但我無法弄清楚。

**編輯:對不起,我在Access中執行此操作。 通過Dated刪除組會導致Access中出現錯誤。我不能確定這是怎麼回事

「你試圖excecute查詢不包括指定 表達「年代爲聚合函數的一部分。」 **

d斯坦利解決我的問題與以下查詢

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

什麼數據庫系統? SQL Server? MySQL的?甲骨文?還有別的嗎? 'sql'標籤本身只代表標準語言,但日期操作功能並不傾向於遵循標準。 –

+0

如果您按日期分組,則會針對日期的每個不同值獲得一行。這完全正常。 –

+0

您需要從Dated列中刪除時間。 –

回答

2

在訪問你的王牌使用DateValue函數從日期欄刪除時間:

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

謝謝!這結束了完美的工作。我沒有意識到日期時間的一部分導致了問題。 – Duffie

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只在日期部分的組成部分的工作(在這裏, day)。那麼,這是「自01/01/1900午夜以來已經發生了多少次完整的日子?」和「讓我們在午夜01/01/1900加上相同的天數」 - 這給了我們與我們開始時的價值相同的日期,但總是在午夜。


對於Access,我認爲你必須引用日期部分(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] 
0

我想在訪問這將是:

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