2013-05-18 1 views
2

я следующий данные в моей таблице SQL:Sum различной дата общей

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 

Я хочу просуммировать количество до следующего дня 5 утра. Результат должен быть следующим.

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

Вы должны извлечь DATE после вычитания 5 часов и группы, что:

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

Похоже на то, что вторая часть ответа Ричарда, за исключением того, что вы указали ошибку, недействительна для ссылки на псевдоним столбца в «GROUP BY» на SQL Server. –

+0

И, к счастью, SQL Server поддерживает порядковый номер столбца GROUP BY. –

+0

@MartinSmith Мне было интересно узнать об алиасе в группе - исправлено. Я знал, что SQL Server отстает, но я продолжаю забывать, насколько далеко (я никогда не использую его кстати). Я посмотрел на Ричардс, но не понял '[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+, вы можете использовать тип данных Даты

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 ... Я думаю, формат неправильный. Но после того, как я попробую, код работает очень хорошо. Большое вам спасибо. –

Смежные вопросы