【问题标题】:How to compute monthly interval average and group by month如何计算每月间隔平均值并按月分组
【发布时间】:2015-01-22 14:00:20
【问题描述】:

我正在使用 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(这导致我的数据不是按月分组而是按天分组,我明白了),我得到错误的平均值。

【问题讨论】:

  • 从字段列表和 group by 子句中删除 c.date 也应该这样做,你的意思是错误的平均值?
  • 我的意思是......我很愚蠢。我的计算从一开始就是错误的,当我从选择中删除 c.date 时,平均计算值确实是好的。感谢您的关注。

标签: sql postgresql group-by


【解决方案1】:

使用实际字段名称而不只是数字重新编写“分组依据”,然后从选择中删除 c.date。这很容易。

【讨论】:

  • 是的,这对您来说可能很容易。如果我问这个问题,那肯定不适合我!我在验证结果时犯了一个错误,我的请求是正确的。还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多