2015-02-18 2 views
1
id    date  calls 
5 2015-02-17 01:06:01  1 
6 2015-02-17 11:07:01  2 
7 2015-02-17 23:06:01  3 
8 2015-02-18 03:07:01  1 
9 2015-02-18 09:06:01  2 
10 2015-02-18 17:07:01  3 
11 2015-02-18 22:06:01  4 
12 2015-02-19 01:07:01  1 
13 2015-02-19 08:06:01  2 
14 2015-02-19 18:07:01  3 
15 2015-02-19 23:06:01  4  

Моя структура таблицы похожа на это, и мне нужно рассчитать сумму звонка в каждый день. В этой таблице вы можете видеть, что последний звонок в фев-17 был в 23:06:01, а кол-счетом было 3. В feb 18 было в 22:06:01, а кол-счетом было 4. Могу ли я получить сумму все это последнее количество звонков каждого дня.В любом случае, чтобы получить последние вставленные значения за каждый день

+2

Ответ: да, но вы пробовали что-нибудь еще? –

+0

Похож на агрегацию: http://www.postgresql.org/docs/current/interactive/tutorial-agg.html –

+0

Привет, Christain, http://www.sqlfiddle.com/#!2/d67d3/4 –

ответ

1

Вы можете использовать подзапрос, чтобы определить, какие строки суммировать (те, соответствующие последний вызов для каждой даты, используя MySQL это будет:

select sum(calls) sum_last_calls 
from your_table 
where `date` in (
    select max(date) max_date 
    from your_table 
    group by date(`date`) 
    ) 

Этот запрос возвратит 11 как сумма (от 3 + 4 + 4).

Функция date(), используемая в подзапросе, специфична для вашей базы данных и может потребоваться изменить в соответствии с вашим синтаксисом конкретной базы данных - дело в том, что оно должно возвращать дату без времени (это может быть date::date (Postgresql) или cast(date as date) (MSSQL и другие)).

Пример SQL Fiddle для MySQL и Postgresql

+0

Спасибо приятель, мне нужно звонить между двумя датами. Является ли это возможным? –

+0

Можете ли вы исправить это. http://www.sqlfiddle.com/#!2/d67d3/4 –

+0

@RoginThomas Вам нужно использовать 'group by' в подзапросе, как это: http://www.sqlfiddle.com/#!2/d67d3/10 – jpw

0

Postgresql версия:

select sum(calls) as calls 
from (
    select max(calls) as calls 
    from t 
    where date::date between '2015-02-17' and '2015-02-19' 
    group by date::date 
) s