以正确的方式命名这个问题相当困难,因为我有以下案例。考虑表:
A B C
1-Jan 0.1 1
2-Jan 0.1 0
3-Jan 0.5 0
4-Jan 0.3 1
这表示特定日期 (A) 的典型收入有一定金额 (B)。并且有一个日期为周末的标志 (C)。由于 1 月 2 日和 1 月 3 日是周末,我只能预期 1 月 4 日的相应金额,并且需要将上表转换为以下表示形式(所需结果):
A1 B1 C1
1-Jan 0.1
4-Jan 0.1 02-Jan
4-Jan 0.5 03-Jan
4-Jan 0.3
这显然表明我可能会在 1 月 4 日收到 1 月 2 日和 3 日的收入(这就是为什么我有 C1 列)。 总体逻辑是,每个周末的估计都会添加到下一个工作日(向前看),除非该月的最后一天是周末,那么我必须将其值添加到最后一个工作日(向后看)。
用某种循环来解决这个问题是可能的,我可以管理它。但我很高兴知道是否有更有效的解决方案(我可以在 SELECT 中放入 IF 的东西),因为数据量很大(意味着每天某些列 D 中有数千个值)。所以循环可能是相当昂贵的解决方案。另外,虽然有 C1 作为引用和测试固然很好,但只有 A1 和 B1 是绝对必要的。
我尽力在这里找到类似的主题,但由于我不知道如何正确命名这个解决方案(向前看主要指正则表达式),所以我无法做到这一点。提前致谢。
最佳答案
您可以运行选择:
select min(case when c = 1 then a end) over (order by a desc) as a1,
b as b1,
(case when c = 0 then a end) as c1
from t;
Here是一个数据库<> fiddle 。
关于sql - 使用 SQL 进行表修改/重新计算(通过前瞻和回顾进行归约),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66400335/