以整体最大值计算

问题描述 投票:0回答:1

计算线性方程时出现问题。这就是本质。例如,我们从 08/01/2024 到 08/15/2024 销售了 20 辆汽车,我们需要使用公式:20/15*31 来预测销量,其中 20 是汽车数量,15 是汽车数量过去了天数,31 是该月的总天数。

在 SQL 中,它看起来像这样:

ROUND(SUM(C.CAR_COUNT) / EXTRACT(DAY FROM MAX(D.DAY_DT)) * EXTRACT(DAY FROM LAST_DAY(MIN(D.DAY_DT))), 0) AS CAR_PREDICTION,

但问题是,销售点有很多,每个销售点都有不同的 MAX(D.DAY_DT),而我们需要确保所有销售点都乘以最后一天,即 15。

使任务进一步复杂化的是该值需要是动态的,因此硬编码 15 不是一个选项。

也许有人有一些想法。

ROUND(SUM(C.CAR_COUNT) / EXTRACT(DAY FROM MAX(D.DAY_DT)) * EXTRACT(DAY FROM LAST_DAY(MIN(D.DAY_DT))), 0) AS CAR_PREDICTION 
or 
ROUND(SUM(C.CAR_COUNT) / EXTRACT(DAY FROM MIN(D.DAY_DT)) * EXTRACT(DAY FROM LAST_DAY(MIN(D.DAY_DT))), 0) AS CAR_PREDICTION

不工作

sql oracle11g oracle10g
1个回答
0
投票

你有这样的东西:

SELECT
  point_of_sale,
  ROUND(SUM(c.car_count) / 
    EXTRACT(DAY FROM MAX(d.day_dt)) * 
    EXTRACT(DAY FROM LAST_DAY(MAX(d.day_dt)))
    , 0) AS car_prediction
FROM mytable
GROUP BY point_of_sale;

但是您不想使用每个销售点的

MAX(d.day_dt)
,而是想使用整体
MAX(d.day_dt)
。可以说是最大值中的最大值。这是:

MAX(MAX(d.day_dt)) OVER ()

因此,查询变为:

SELECT
  point_of_sale,
  ROUND(SUM(c.car_count) / 
    EXTRACT(DAY FROM MAX(MAX(d.day_dt)) OVER ()) * 
    EXTRACT(DAY FROM LAST_DAY(MAX(MAX(d.day_dt)) OVER ()))
    , 0) AS car_prediction
FROM mytable
GROUP BY point_of_sale;
© www.soinside.com 2019 - 2024. All rights reserved.