sql - 在指定日期之间向表 Oracle 添加缺失记录
问题描述
我有如下表:
但我想要的是低于输出:
从 min.date 到 max 的每一天都应该存在每个名称记录。日期。如果记录不存在于原始表中,则其值应在特定日期更新为 0。
我无法弄清楚这个查询。请。任何人都可以建议我为此编写查询。
提前致谢..!
解决方案
如果表中有所有日期,则可以使用原始表中的数据。用于cross join
生成行,然后left join
引入值:
select n.name, d.date, coalesce(t.value, 0) as value
from (select distinct name from t) n cross join
(select distinct date from t) d left join
t
on t.name = n.name and t.date = d.date;
如果某些日期完全从表中丢失,那么您需要一个日历表或某种 CTE 来生成所有日期。
推荐阅读
- nginx - Nginx 不会将所有请求重定向到 index.html
- javascript - 如何从命令行将参数传递到我的 Javascript 代码中?
- javascript - For..of 和 Symbol.asyncIterator
- firebase - 我如何使用从其他页面获取的值
- android - 片段与 viewpager 之间的通信
- ruby-on-rails - 尝试运行 Rails 服务器并遇到有关“适配器”的一些错误
- maven - 在多模块中单独发布工件 - 聚合器 maven 项目
- python-3.x - 我尝试解决 CSES 问题集中的交通灯问题,我的方法似乎适用于小输入,但我面临大输入的 TLE
- git - 为什么我在删除本地文件后进行 git push 时仍然显示已删除的文件
- sql-server - 同步 SQL Server 和 Analysis Services