计算线性方程时出现问题。这就是本质。例如,我们从 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
不工作
你有这样的东西:
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;