我是使用Oracle SQL Developer编写Oracle SQL的新手,已经从MS SQL Server环境进行了更改。尝试计算两个日期之间的平均值,截断,并获取其中一个日期(appt.CONTACT_DATE)为NULL的值。我希望那里有空。请参阅下面的代码。我做错了什么?非常感谢帮助。
TRUNC (
AVG (
TO_DATE (appt.CONTACT_DATE, 'DD-MM-YYYY')
- TO_DATE (REF.ENTRY_DATE, 'DD-MM-YYYY'))
OVER (PARTITION BY ser2.PROV_NAME),
1)
AS "AVG BY PROVIDER"
答案 0 :(得分:2)
那将是
TRUNC (AVG (appt.contact_date - REF.entry_date) OVER (PARTITION BY ser2.prov_name), 1)
,因为:
编辑
更多信息:这是一个显示正在发生的事情的例子:
SQL> with
2 appt (contact_date) as
3 (select trunc(sysdate) from dual union
4 select null from dual union all
5 select null from dual),
6 ref (entry_date) as
7 (select trunc(sysdate - 5) from dual),
8 ser2 (prov_name) as
9 (select 'a' from dual)
10 select appt.contact_date, ref.entry_date, ser2.prov_name,
11 TRUNC (AVG (appt.contact_date - REF.entry_date) OVER (PARTITION BY ser2.prov_name), 1) avg_by_provider
12 from appt, ref, ser2;
CONTACT_ ENTRY_DA P AVG_BY_PROVIDER
-------- -------- - ---------------
30.04.18 25.04.18 a 5
25.04.18 a 5
25.04.18 a 5
SQL>
虽然有两个NULL值,但AVG仍然返回结果,它不是NULL。怎么会?由于ANSI SQL标准,它表示聚合函数(例如AVG)忽略 NULL值。