Как выбрать суммы с группировкой по дате?

Есть к примеру таблица со столбцами sum и date с датойв unix формате
Мне нужно на выходе получить сумму поля sum до какой-то даты.
К примеру:
до 5 января сумма всех строк sum = 12000
до 6 января сумма всех строк sum = 15000

И так далее
Это вывод для статистики. Надеюсь понятно объяснил
  • Вопрос задан
  • 6404 просмотра
Пригласить эксперта
Ответы на вопрос 4
@edogs
Если дат далеко не одна, то можно так
select 
`sum( if( `date`<'2012-01-01',sum20120101,0) ) as sum20120101 ,
`sum( if( `date`<'2012-01-02',sum20120102,0) ) as sum20120102 
from table
where `date`<'2012-01-02'
Ответ написан
tyzhnenko
@tyzhnenko
System Administrator, DevOps, QA Engineer
одним запросом это сильно «дорого» :(
лучше сделать скрипт который каждые сутки будет делать

insert into stat_table select date_sub(current_date, 1), sum(sum) from table where date < current_date;

create table stat_table (
 to_day date,
 big_sum int,
 primary key(to_day)
)


либо если уж совсем хочется делать все динамически тогда можно попробовать вот такую красоту:

set @prev_day_sum:=0;
select
    day, 
    @prev_day_sum:=d_sum + @prev_day_sum as sum_from_month_begin, 
    d_sum 
from
    (select 
        date(date) as day, 
        sum(sum) as d_sum
    from 
        table 
    group by 
        day;
    ) as day_sum; 


day — день
sum_from_month_begin — сумма от начала месяца
d_sum — за конкретный день
Ответ написан
Комментировать
@aretmy
Если дата одна, то вот так можно:
   select sum(`sum`) from `table` group by greatest(`day`, '2012-01-01')

Все строки до указанной даты будут суммироваться, а после нее и с ней самой идти по отдельности.
Ответ написан
Комментировать
@eugene_t
select
date_format( from_unixtime(UNIX_TIME_COLUMN), '%Y-%m-%d'),
sum(SUM_COLUMN)
from TABLE_NAME
group by 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы