2015-01-22 5 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" 
... 

하지만 그것은 동작하지 않습니다 :

것은 내가, 월 사용 가능한 각 일 간격의 평균, 월별로 그룹화 그 결과를 가지고 즉 싶습니다이다. select에서 c.date을 제거하면 (월별로 그룹화되지는 않지만 하루에 그룹화되지는 않습니다.) 평균 값이 잘못됩니다.

+0

필드 목록에서'c.date'를 제거하고 group by 절도 역시 그렇게해야합니까? false average values는 무엇을 의미합니까? –

+0

그 말은 ... 난 바보 야. 내 계산은 처음부터 거짓이었고, 평균 계산 값은 선택에서 c.date를 제거 할 때 참으로 좋은 값입니다. 관심을 가져 주셔서 감사합니다. – Mat

답변

0

숫자 만이 아닌 실제 필드 이름을 사용하여 "group by"을 다시 쓰고 나중에 select에서 c.date를 제거하십시오. 쉽습니다.

+1

네, 그게 아마도 당신에게 쉽습니다. 내가 질문하는 중이라면, 분명히 나에게는 그렇지 않다! 나는 결과를 확인하는 동안 실수를했다. 나의 요청은 정확했다. 어쨌든 고맙습니다. – Mat