2015-01-22 2 views
1

Я использую Postgres.Как вычислить среднемесячный интервал и группу по месяцам

У меня есть следующий запрос, который вычисляет средний временной интервал для каждого дня месяца. Ну, по крайней мере, каждый день, когда у меня есть доступные данные:

SELECT 
    date_part('year'::text, c.date) AS yyyy, 
    to_char(c.date, 'MM'::text) AS monthnumber, 
    to_char(c.date, 'TMMonth'::text) AS monthname, 
    c.date, 
    l.name AS lineName, 
    avg(COALESCE(c.observed_arrival_time, v.arrival_time) - v.arrival_time) AS time_difference 


FROM Counter c 
    JOIN vehicule_journey_at_stop v ON v.id = c.vj_at_stop_id 
    JOIN vehicule_journey vv ON vv.id = v.vehicule_journey_id 
    JOIN route_analyse r ON r.id = vv.route_id 
    JOIN line l ON l.id = r.line_id 
    JOIN pt_network n ON n.id = l.network_id 

WHERE 
    date_part('year',c.date) = 2014 
    AND c.name = 'montée' 

GROUP BY 1,2,3,4,5 
ORDER BY 1,2 

я получаю в основном то, что я хочу, результаты выглядят следующим образом:

... 
2014;"07";"Juillet";"2014-07-12";"Ligne 01";"00:04:16.0685" 
2014;"07";"Juillet";"2014-07-20";"Ligne 01";"00:04:56.509875" 
2014;"07";"Juillet";"2014-07-23";"Ligne 02";"00:00:00" 
2014;"07";"Juillet";"2014-07-24";"Ligne 03";"00:00:00" 
... 

Главное, среднее время в последней позиции, вычисленная для каждой «линии» (например, «Ligne 01» или Ligne «02»).

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

... 
2014;"07";"Juillet";"Ligne 01";"00:04:36.5974375" 
2014;"07";"Juillet";"Ligne 02";"00:00:00" 
2014;"07";"Juillet";"Ligne 03";"00:00:00" 
... 

Но я не могу заставить его работать. Если я удалю c.date из выбранного (что заставляет мои данные не сгруппироваться по месяцам, а днем), я получаю ложные средние значения.

+0

удаление 'c.date' из списка полей и из предложения group by тоже должно это сделать, что вы имеете в виду подлинные средние значения? –

+0

Я имею в виду ... Я глуп. Мой расчет был ложным с самого начала, среднее вычисляемое значение действительно хорошее, когда я удаляю c.date из select. Спасибо за ваш интерес. – Mat

ответ

0

Повторно написать «group by», используя фактические имена полей, а не только цифры, и затем удалите c.date из select. Это легко.

+1

Да, это, вероятно, легко для вас. Если я задам вопрос, это, конечно, не для меня! Я допустил ошибку при проверке результатов, моя просьба была правильной. В любом случае, спасибо. – Mat

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