是否有 Oracle 分析函数来帮助计算账单日之间的最大值?

Is there an Oracle analytic function to help compute max value between billing days?

问题:

我需要帮助添加一个 PERIOD_MAX 列,该列计算计费周期之间的最大 DAILY_USAGE 值。有没有 Oracle Analytic Function 可以帮助我?

注意:新的 PERIOD_MAX 列应指示 'Y' 当该行等于自上一个账单日以来所有行中 DAILY_USAGE 值的最大值(黑色-边框框,由 BILLING_DAY).

分隔

我希望它看起来如何:

以下是每一列的说明:

这是一个 Oracle 查询:

请从这个查询开始,它生成的数据就像它存在于我的数据库中一样,然后尝试添加所需的 PERIOD_MAX 列。

  SELECT READ_TIME, BILLING_DAY, SUM (DAILY_USAGE) OVER (ORDER BY READ_TIME) + 1000 AS METER_READING, DAILY_USAGE
FROM (SELECT X.SEQ + TRUNC (SYSDATE - 20) + DBMS_RANDOM.VALUE / 8 + 0.3         AS READ_TIME
           , CASE WHEN X.SEQ / 7 = TRUNC (X.SEQ / 7) THEN 'Y' ELSE NULL END     AS BILLING_DAY
           , ROUND (DBMS_RANDOM.VALUE * 100, 2)                                 AS DAILY_USAGE
        FROM ( SELECT LEVEL AS SEQ FROM DUAL
               CONNECT BY LEVEL <= 20) X) Y ORDER BY READ_TIME;

感谢您的帮助。

您可以对 billing_day 进行累加(或真正计数)以生成一个组。然后,做组内最大值:

select t.*,
       (case when row_number() over (partition by period order by daily_usage desc) = 1
             then 'Y' else 'N'
        end) as period_max
from (select t.*,
             count(billing_day) over (order by reading_day) as period
      from t
     ) t;