我无法确定最终降价。我有年数和每年的折扣。所以,我需要找出去年的最终价格是多少。如果我在一年内有折扣,那么我也需要在接下来的几年中获得折扣价,而不是原价。正如所附的屏幕截图所示,您可以看到在 2022 年和 2023 年我有 5% 的折扣,但这两年的结果是相同的,因为 5% 比原价减少了 5%,尽管在 2023 年必须减少 5% 2022 年已降价的 %。2024 年我有 0% 的折扣,所以我需要在 2024 年有 2023 年的价值。2025 年我有 2% 的折扣,所以应该从 2024 年的价值减少。这里是代码:
select k.object_number, k.plant, k.company, k.discount, k.demand, k.year, k.Price,
case when (k.discount) is null then k.price else k.price * (100-k.discount)/100 end as Reduced_price
from K_TABLE as K
order by k.year`
实际结果示例:
Object Number Plant Company Demand Year Discount Price Reduced Price
1A 30 ABC 790 2021 0 45,88 45,88 1A 30 ABC 17587 2022 5 45,88 43,586 1A 21 ABC 7824 2022 5 45,88 43,586 1A 63 ABC 12038 2023 5 45,88 43,586 1A 30 ABC 21039 2023 5 45,88 43,586 1A 30 ABC 24299 2024 0 45,88 45,88 1A 37 ABC 17257 2024 0 45,88 45,88 1A 83 ABC 3060 2025 2 45,88 44,9624 1A 21 ABC 49647 2025 2 45,88 44,9624 1A 30 ABC 19904 2026 0 45,88 45,88
请查看随附的屏幕截图以获取完整结果。`
您可以使用算术计算总折扣——即对数和指数:
select k.*,
(1 - exp(sum(ln(1 - discount / 100)) over (partition by object_number, plant, company order by year)
) as total_discount,
(price *
exp(sum(ln(1 - coalesce(discount, 0) / 100)) over (partition by object_number, plant, company order by year)
) as reduced_price
from K_TABLE as K
order by k.year;
exp(sum(ln( . . . )))
表达式正在做累积乘积。这不是内置于 SQL 中的,但它可以使用数学运算进行计算。
注意:很难说出数据中的“单位”是什么——也就是说,同一单位的“下”行是什么构成。我假设它是物体、工厂和公司的组合。但是,我希望有一个类似“产品”列的内容,其中的信息位于单个列中。