sql - 使用 SQL 修改/重新计算表(减少前瞻和后顾)
问题描述
以正确的方式命名问题非常困难,因为我有以下案例。考虑表:
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 月 2 日和 3 日到 1 月 4 日的收入(这就是我有 C1 栏的原因)。总体逻辑是,每个周末估计都会添加到下一个工作日(向前看),除非该月的最后一天是周末,否则我必须将其值添加到最后一个工作日(向后看)。
用某种循环解决这个问题是可能的,我可以管理它。但是我很高兴知道是否有更有效的解决方案(一些东西,我可以在 SELECT 中放入 IF),因为数据量很大(也就是说,每天 D 列中有数千个值)。所以循环可能是相当昂贵的解决方案。此外,虽然有 C1 供参考和测试会很好,但只有 A1 和 B1 是绝对必要的。
我尽力在这里找到类似的主题,但是由于我不知道如何正确命名此解决方案(向前看主要是指Regex),所以我无法做到。提前致谢。
解决方案
您可以将选择运行为:
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;
这是一个 db<>fiddle。
推荐阅读
- delphi-7 - 使用Delphi 7获取HTML,最后得到一个烦人的零
- xml - 代码未按预期写入子目录并且内存使用率很高
- asp.net - 小计显示时隐藏网格视图复选框
- linux - 使用 find 递归地将所有 .jpg 文件添加到它们自己的 html 元素中
- javascript - 带有 PopState 和 AJAX 的 HTML 5 History API 不断重新加载页面
- python - 如何使用另一个 numpy 数组修改 pandas 数据框中的所有值
- laravel - 如何使用另一个对象的 ID 获取一个对象?
- c++ - 这个解决方案背后的直觉
- json - JSON 行 Mime 类型
- python - 使用 Python 3 从 HTML/CSS 获取带有样式的 SVG