使用简单查询的日期之间的平均值

时间:2014-03-01 18:11:03

标签: sql oracle

我正在试图弄清楚如何弄清楚我在桌子上得到的一些日期差异的平均值。我对此很新,所以我试图先将持续时间(作为日期之间的差异)作为变量,然后调用avg函数,但这是一个烂摊子!! 这就是我目前正在尝试做的事情,以及它因此的错误消息:

SQL> select months_between( select (finish_date from projects where id = 1), 
                            select ( start_date from projects where id = 1)
                          ) from dual;

    select months_between( select (finish_date from projects where id = 1),
                       *  ERROR at line 1: ORA-00936: missing expression

请有人,请指出我遗失的表达方式是什么?我认为所有列都是输入的。

1 个答案:

答案 0 :(得分:0)

确切地解决你所问的问题真的很难,但是假设你想要所有项目的开始和结束日期之间的平均月数,你基本上想要这个:

SELECT AVG( MONTHS_BETWEEN( start_date, finish_date ) )
FROM   projects

基本上你“MONTH_BETWEEN”会找出SELECT语句找到的每一行的日期之间的差异,然后AVG会将它们全部组合成一行并计算出你的平均值(平均值)。 p>

如果您只是关闭AVG并尝试以下操作,您可以看到MONTHS_BETWEEN的作用:

SELECT start_date, finish_date, MONTHS_BETWEEN( start_date, finish_date )
FROM   projects

如果您想要较小子集的平均值,则可以添加where子句。

E.g。对于2014年1月1日之后开始的项目:

SELECT AVG( MONTHS_BETWEEN( start_date, finish_date ) )
FROM   projects
WHERE  start_date > TO_DATE( '01-01-2014', 'dd-mm-yyyy' )

或者假设您想要每个部门项目的平均值(如果在您的数据模型中),您可以将部门添加到SELECT并添加GROUP BY:

SELECT department, AVG( MONTHS_BETWEEN( start_date, finish_date ) )
FROM   projects
GROUP BY department

这会回答你的问题吗?