如何计算每月间隔平均值和按月分组
How to compute monthly interval average and group by month
我正在使用 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"
...
重要的是最后位置的平均时间,为每个 "line"(例如 "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
(这会导致我的数据不是按月分组,而是按天分组,我明白了),我会得到错误的平均值。
使用实际的字段名称重写 "group by",而不仅仅是数字,然后从 select 中删除 c.date。很简单。
我正在使用 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"
...
重要的是最后位置的平均时间,为每个 "line"(例如 "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
(这会导致我的数据不是按月分组,而是按天分组,我明白了),我会得到错误的平均值。
使用实际的字段名称重写 "group by",而不仅仅是数字,然后从 select 中删除 c.date。很简单。