mysql - 通过 LEAD/LAG 或递归 CTE 更新?
问题描述
有一个表格持有日期和账户余额。但是,余额在某些日期不可用。假设当日期不可用时余额不会改变。如何更新所有日期的余额信息?
这是一个示例:表 D 包含所有有效日期。
2000-01-01
2000-01-02
2000-01-03
2000-01-04
2000-01-05
2000-01-06
2000-01-07
2000-01-08
2000-01-09
表 A 包含日期和帐户余额。
2000-01-02 $100
2000-01-05 $200
2000-01-09 $700
最终,我想生成一个这样的表:
2000-01-01 null
2000-01-02 $100
2000-01-03 $100
2000-01-04 $100
2000-01-05 $200
2000-01-06 $200
2000-01-07 $200
2000-01-08 $200
2000-01-09 $700
我想过以下几点:
- 领先和落后,
- 递归 CTE
但是,似乎它们都不适合这种情况。
解决方案
ANSI SQL。
Table_D
-------
dd(field name)
-------
2000-01-01
2000-01-02
2000-01-03
2000-01-04
2000-01-05
2000-01-06
2000-01-07
2000-01-08
2000-01-09
Table_A
-------
dd(field name) cost(field name)
-------
2000-01-02 $100
2000-01-05 $200
2000-01-09 $700
select a.dd
, (
case when a.cost is null then min(a.cost) OVER (partition by a.cost_group ORDER BY a.dd) else a.cost end
) as cost
from (
select a.dd, b.cost
, count(b.cost) over (order by a.dd) as cost_group
from Table_D a
left join Table_A b on (b.dd = a.dd)
) a
推荐阅读
- pine-script - 尝试绘制日内保证金率的背景颜色
- javascript - 没有重复的javascript新数组
- javascript - 如何将 React 元素附加到 JavaScript 对象的属性
- python - 使用百分比和数据框分组
- python-3.x - 如何将单选按钮值传递给
事件? - aws-glue - 如何将 CloudWatch 自定义日志组与 Python Shell Glue 作业一起使用?
- node.js - Gitlab-ci 脚本和 ssh 中的 Nvm
- amazon-web-services - 创建安全组和添加入站/出站规则所需的 AWS IAM 策略权限是什么?
- javascript - 如何用axios发送多个文件和json数据
- python-3.x - 在 Mac 上使用 CMD 时,python 键盘模块会出错