sql - 如何在空记录之间填充缺失的日期?
问题描述
我正在尝试在空记录之间填充日期,但没有成功。尝试做多项选择方法,尝试加入,但似乎我错过了重点。我想生成缺少日期的记录,以从这段代码生成图表。首先,我想“手动”填写日期,稍后我将重新组织此代码并将该方法交换为参数。
有人可以帮我解决这个问题吗?
SELECT
LOG_LAST AS "data",
SUM(run_cnt) AS "Number of runs"
FROM
dual l
LEFT OUTER JOIN "LOG_STAT" stat ON
stat."LOG_LAST" = l."CLASS"
WHERE
new_class = '$arg[klasa]'
--SELECT to_date(TRUNC (SYSDATE - ROWNUM), 'DD-MM-YYYY'),
--0
--FROM dual CONNECT BY ROWNUM < 366
GROUP BY
LOG_LAST
ORDER BY
LOG_LAST
//编辑:
LOG_LAST 只是一个带有日期的列(例如:25.04.2018 15:44:21),run_cnt 是一个只有一个简单数字的列,LOG_STAT 是一个包含 LOG_LAST 和 run_cnt 的表,new_class 是一个带有记录名称的列我想列出记录,即使它们不存在。例如:我有一个日期为 24-09-2018、23-09-2018、20-09-2018、18-09-2018 的记录,我想列出即使没有名称和 run_cnt 的记录,但要生成缺失某个时期的日期
解决方案
你想要的或多或少是:
select d.day, sum(ls.run_cnt)
from all_dates d
left join log_stat ls on trunc(ls.log_last) = d.day
where ls.new_class = :klasa
group by d.day
order by d.day;
上述查询中的all_dates
表应该包含所有以最小 klasa log_last 日期开始并以最大 klasa log_last 日期结束的日期。您可以通过递归查询获得这些日期。
with ls as
(
select trunc(log_last) as day, sum(run_cnt) as total
from log_stat
where new_class = :klasa
group by trunc(log_last)
)
, all_dates(day) as
(
select min(day) from ls
union all
select day + 1 from all_dates where day < (select max(day) from ls)
)
select d.day, ls.total
from all_dates d
left join ls on ls.day = d.day
order by d.day;
推荐阅读
- javascript - 仅提取对象中具有值的属性
- wordpress - 带有 ACF 的双语自定义字段标签(免费版)
- clojure - 如何在clojure中合并地图列表
- ruby-on-rails - 如何通过设计在rails应用程序中构建两个用户模型(一个用于公共,另一个用于管理员)
- qt - 我可以在 QML 中控制委托到 PathView 的连接点吗?
- mongodb - 猫鼬填充不返回任何结果
- encryption - 如何解析透明代理的数据包?
- azure - 无法将 webhook 订阅添加到 Azure 事件网格
- oauth-2.0 - 带有 OAuth2 的 CAS Apereo:如何在 Userprofile 中发布 Client-ID
- angular - *ngFor 点击隐藏