首页 > 解决方案 > 获取每个月的平均经过时间

问题描述

我有一张表,上面有输入日期和完成日期(记录可以追溯到几年前),我需要编写一个查询,给出每个月完成的平均时间。我可以得到总体平均水平,

SELECT AVG ( t.completion_dt - t.entry_dt ) * 24 
  FROM table t;

或特定月份的平均值,

SELECT AVG ( t.completion_dt - t.entry_dt ) * 24 
  FROM table t
 WHERE t.entry_dt BETWEEN to_date('2018/12/01','yyyy/mm/dd') AND
                          to_date('2019/1/01', 'yyyy/mm/dd');

有没有办法让查询返回每个月的平均值?

标签: sqloraclegroup-by

解决方案


如果您想独立查看每个月/年(2020 年 1 月与 2019 年 1 月在不同的行上),那么您可以对entry_dt在该月截断的字段进行分组。

SELECT trunc(t.entry_dt,'MM'),
       AVG ( t.completion_dt - t.entry_dt ) * 24 
  FROM table t
group by trunc(t.entry_dt,'MM');

如果您想在多年内平均所有 1 月的月份,您将需要按照您所在entry_dt领域的 to_char 之类的东西进行分组。

SELECT to_char(t.entry_dt, 'Month'),
       AVG ( t.completion_dt - t.entry_dt ) * 24 
  FROM table t
group by to_char(t.entry_dt, 'Month');

推荐阅读