PL/SQL:求两个值的减法的平均值



本质上,我的函数的一部分是找到一个名为Days_Stayed的局部变量的平均值,这是Departure_Date和Arrival_Date的减法。REGISTRATION 表仅存储人员到达和离开的日期,而不是停留时间本身。

我的问题是,当客户停留不止一次时,就会发生这种情况,因此有多个Departure_Dates和Arrival_Dates。平均值由每个减法的结果之和组成,如果这有意义的话。

CREATE OR REPLACE FUNCTION
(p_CustomerCode CHAR)
RETURN VARCHAR2
IS 
v_Output VARCHAR2(100);
Days_Stayed DATE;
BEGIN
--SELECT STATEMENT FROM REGISTRATION TABLE--
IF Registration_Status = 'R' THEN
Days_Stayed = Departure_Date - Arrival_Date;
v_Output := (SELECT TO_CHAR(AVG(Days_Stayed), 'Day') 
FROM REGISTRATION WHERE Customer_Code = p_CustomerCode), 
--other columns

如果有人能帮助我解决这个问题,将不胜感激!

听起来应该是:

v_Output := (SELECT TO_CHAR(AVG(Departure_Date - Arrival_Date), 'Day') 
FROM REGISTRATION WHERE Customer_Code = p_CustomerCode)

只需将减法放在 select 语句中即可。 这行得通吗?

对我来说,这听起来像SUM/COUNT,例如

SQL> with registration (id, departure_date, arrival_date) as
2    (select 1, date '2019-09-20', date '2019-09-17' from dual union all -- 3 days
3     select 1, date '2019-08-13', date '2019-08-11' from dual union all -- 2 days
4     select 1, date '2019-08-08', date '2019-08-01' from dual union all -- 7 days
5     --
6     select 2, date '2019-07-20', date '2019-07-19' from dual union all -- 1 day
7     --
8     select 3, date '2019-08-27', date '2019-08-25' from dual union all -- 2 days
9     select 3, date '2019-08-14', date '2019-08-12' from dual           -- 2 days
10    )
11  select id,
12         sum(departure_date - arrival_date) / count(*) avg_days_stayed
13  from registration
14  group by id;
ID AVG_DAYS_STAYED
---------- ---------------
1               4
2               1
3               2
SQL>

为什么?您的代码减去出发和到达日期(单个值(,那么 - 您将如何选择一个值的平均值?也许你的意思是使用循环(通过每个人(或其他东西,但是 - 上面的查询可能会把你推向正确的方向,即没有循环,使用单个查询。

最新更新