2010-03-31 3 views
0

У меня есть таблица MySQL, как это:Агрегирование MySQL строк на день

Payments 
+----+---------------------+---------+ 
| id | date (sorted DESC) | payment | 
+----+---------------------+---------+ 
| 5 | 2010-03-26 00:00:01 | 100.00 | 
| 4 | 2010-03-19 00:00:02 | 55.12 | 
| 3 | 2010-03-19 00:00:01 | 20.00 | 
| 2 | 2010-03-12 00:00:02 | 320.00 | 
| 1 | 2010-03-12 00:00:01 | 64.56 | 
+----+---------------------+---------+ 

Как агрегировать суммарные платежи день?

Платежи вставляются в таблицу каждую неделю, но это не всегда то же самое время, что вы можете видеть. Может ли агрегация в день быть выполнена изначально в MySQL?

Желаемый результат будет:

+------------+----------------+ 
| date  | total payments | 
+------------+----------------+ 
| 2010-03-26 |   100.00 | 
| 2010-03-19 |   75.12 | 
| 2010-03-12 |   384.56 | 
+------------+----------------+ 

Спасибо заранее.

+0

В вашем примере вы агрегировать в день, это намного проще и намного лучше, чем определяется «давать или занять несколько секунд». –

+0

Я понимаю, что вы имеете в виду. Отредактировано, чтобы сделать его более ясным. –

ответ

3

Вы можете сделать 2 вещи, изменить тип данных на сегодняшний день, чтобы просто сохранить дату (это может быть невозможно в вашей ситуации). Или вы можете сгруппировать, изменив значение даты так, чтобы оно было просто датой.

select date(date), sum(payment) 
from payments 
group by date(date) 
order by date(date) desc 
+0

+1, Это мог быть мой ответ, если бы я знал, что агрегирование по дате будет (см. Комментарий к вопросу) ;-) –

0

Вы можете сгруппировать с помощью вызова функции на дату, поэтому конвертировать полный DateTime только дата часть и группа с тем, что до тех пор, как дата в избранных, оно должно быть законным.

1
SELECT CONVERT(VARCHAR(10), date , 102) as date,sum(payment) as total_payment 
FROM Payments 
GROUP BY CONVERT(VARCHAR(10), date , 102) 
ORDER BY CONVERT(VARCHAR(10), date , 102) 

должно быть нормально

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