oracle - 使用 select 语句查询以填充空行
问题描述
我正在尝试使用 1 月份的数据填充剩余月份的空白期初余额单元格。也有缺失的月份。我尝试了以下方法,即使完成初始查询也需要花费大量时间。
事实数据数量约为一百万。
我尝试的方法如下,
- 创建仅包含 1 月 EOM 日期的日期表
- 使用与创建日期表的事实数据不同的帐户密钥进行交叉连接。
- 然后尝试使用另一个左连接查询填充剩余字段,方法是使用 ACC+EOM 构建动态唯一键。
这种方法需要太多时间来执行。请有任何建议
输入
需要输出
解决方案
您可以使用递归 CTE 或仅使用列表来生成月份。然后使用cross join
andleft join
引入数据和窗口函数来填充您要填充的缺失值:
with dates as (
select eomonth(convert(date, '2020-01-01')) as eom
union all
select eomonth(dateadd(1, month, eom))
from dates
where eom < '2020-12-01'
)
select a.acc_code, dates.eom,
max(t.ob) over (partition by a.acc_code) as ob,
t.trans
from yyyymm cross join
(select distinct acc_code from t) a left join
t
on t.eom = dates.eom and t.acc_code = a.acc_code
推荐阅读
- xml - VBA:如何测试从自定义功能区启动的宏?
- reactjs - react redux reducer 无法设置获取 api 数据来存储
- c# - 如何减少执行时间?ProfileBase 的 GetPropertyValue 执行需要 40ms
- python - 具有多个值的 Scikit-learn Imputer
- docker - 在 Nginx 后面访问 Docker Hub
- vba - 使用 VBA 抓取网站
- batch-file - 批量驱动名称
- xamarin - 如何在 xamarin Android 表单中从同意中打开 pdf 文件
- java - 如何在 jsp 文件中获取数据形式的 SQL 表?
- javascript - 在javascript中多次替换子字符串