2013-05-18 58 views
2

我在SQL表以下數據:總和的不同日期的總

Tran_Date   | Amount 
2013-05-01 20:09:49 | 50.00 
2013-05-02 04:09:49 | 50.00 
2013-05-02 20:09:49 | 500.00 

我想第二天上午05點之前總結的量。結果如下。

Amount 
100.00 
500.00 

我嘗試下面的代碼,但結果是錯誤的:

SELECT DATEADD(hh, 5, DATEADD(dd, DATEDIFF(dd, 0, DATEADD(dd,1,f.TRAN_DATE)) AS sDate, 
     SUM(Amount) 
FROM TRAN_TABLE 
GROUP BY sDate 

如何達致這?感謝

+2

請顯示您的企圖... –

+0

對不起,我是新手在sql –

+0

爲什麼給它一個減號,這是一個合理的問題 – Tim

回答

1

你需要減去5小時,後組提取DATE即:

SELECT 
    CAST(DATEADD(hour, -5, TRAN_DATE) AS DATE) AS sDate, 
    SUM(Amount) 
FROM TRAN_TABLE 
GROUP BY CAST(DATEADD(hour, -5, TRAN_DATE) AS DATE) 
+0

看起來基本上與Richard的答案的第二部分相同,除非您引入了一個錯誤,因爲它無法在SQL Server中引用「GROUP BY」中的列別名。 –

+0

也不(謝天謝地)SQL Server支持'GROUP BY'列順序。 –

+0

@MartinSmith我想知道組中的別名 - 現在修好了。我知道SQL Server是落後的,但我一直忘記多遠(我從來沒有使用它)。我看了richards,但不明白'[date] ='whacky語法,所以我使用了標準的sql語法。我沒有注意到剩下的 - 我發現它基本上是相同的(我沒有「複製」)。 – Bohemian

4

對於任何SQL Server版本

select [Date]=DATEADD(DAY,DATEDIFF(DAY,0,DATEADD(HOUR,-5,Tran_Date)),0), 
     Total=SUM(Amount) 
from tbl 
group by DATEADD(DAY,DATEDIFF(DAY,0,DATEADD(HOUR,-5,Tran_Date)),0) 
order by [Date]; 

對於SQL Server 2008+,可以使用DATE數據類型

select [Date]=CAST(DATEADD(HOUR,-5,Tran_Date) as date), 
     Total=SUM(Amount) 
from tbl 
group by CAST(DATEADD(HOUR,-5,Tran_Date) as date) 
order by [Date]; 
+0

感謝你的回答,即使我不能使用你的答案,但你給了我一個想法該怎麼做。非常感謝你。 –

+1

你能解釋爲什麼你不能使用答案嗎? – RichardTheKiwi

+0

Ops ...我認爲格式不正確。但是我嘗試後代碼工作得很好,非常感謝。 –