sql来填充丢失的数据?

sql来填充丢失的数据?,sql,oracle,Sql,Oracle,提供以下查询“ 将输出: PACKET_LOSS PING_AVG PING_DATE PING_DESTINATION PING_SOURCE 0 273 2015-05-07 17:40:16.0 zja68f-wr2 zfr11f-wr2 0 273 2015-05-07 17:45:27.0 zja68f-wr2 zfr11f-wr2 0

提供以下查询“

将输出:

 PACKET_LOSS    PING_AVG    PING_DATE   PING_DESTINATION    PING_SOURCE
0                 273   2015-05-07 17:40:16.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 17:45:27.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 17:50:15.0   zja68f-wr2      zfr11f-wr2

0                 273   2015-05-07 18:00:19.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:05:18.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:10:15.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:15:12.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:20:13.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:25:14.0   zja68f-wr2      zfr11f-wr2

<>这个结果在2015-05-07 17:55:X.x中有一个缺失的行。这可以动态地添加到任何缺失的行中吗?添加一个空值用于PoCuTyLead和Piang-AVG列。

< P>您可能想考虑我的相当艰巨的解决方案是否值得复杂。但是,通过使用连接“技巧”“在Oracle中,我们可以通过以5分钟为间隔递增来模拟这种行为,从而动态创建时间表。然后加入到HouTouth-Ping表中,并在我之前和之后记录行,以确定我是否处于“路由器ping序列”的中间,并适当地显示数据。(注意:我必须更改where子句,因为我没有根据您的输出返回任何数据。)


您问,“是否可以为任何缺少的行动态添加此内容?”是的。您必须生成一个包含所讨论范围的所有潜在日期/时间间隔的表,然后左键连接到您的router\u ping表。实现这一点的一种方法是使用递归(递归CTE),它将为您提供从路由器ping的最小值到路由器ping的最大值的日期/时间,并为每5分钟的间隔生成a值。然后根据YYYY-MM-DD HH:MM返回ping_date并删除其余部分。这里有一个关于日期的现有示例。下面是另一个使用更动态方法的示例
 PACKET_LOSS    PING_AVG    PING_DATE   PING_DESTINATION    PING_SOURCE
0                 273   2015-05-07 17:40:16.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 17:45:27.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 17:50:15.0   zja68f-wr2      zfr11f-wr2

0                 273   2015-05-07 18:00:19.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:05:18.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:10:15.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:15:12.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:20:13.0   zja68f-wr2      zfr11f-wr2
0                 273   2015-05-07 18:25:14.0   zja68f-wr2      zfr11f-wr2
select ping_date, packet_loss, ping_avg, coalesce(ping_source, previous_ping_source), coalesce(ping_destination, previous_ping_destination)
from
(
select coalesce(ping_date, ping_interval) as ping_date, 
coalesce(pings.packet_loss, dates.packet_loss) as packet_loss,
coalesce(pings.ping_avg, dates.ping_avg) as ping_avg,
pings.ping_source, 
pings.ping_destination,
coalesce(pings.ping_source, lag(pings.ping_source, 1, 0) over (order by ping_interval ASC)) previous_ping_source,
coalesce(pings.ping_destination, lag(pings.ping_destination, 1, 0) over (order by ping_interval ASC)) previous_ping_destination,
coalesce(pings.ping_source, lead(pings.ping_source, 1, 0) over (order by ping_interval ASC)) next_ping_source
from
(select ping_date,packet_loss,ping_avg,ping_source,ping_destination
from router_ping 
where ping_date > sysdate - NUMTODSINTERVAL (48, 'HOUR') AND (ping_source = 'zfr11f-wr2' AND ping_destination = 'zja68f-wr2'  OR ping_source = 'zja68f-wr2' AND ping_destination = 'zja68f-wr2' )
) pings
right outer join
(select (select min(ping_date) from router_ping) + (interval '5' minute) * level as ping_interval,
0 as packet_loss, 0 as ping_avg, 'NO DATA ROW' as data_indicator
from dual
connect by level <= 20) dates
on (pings.ping_date = dates.ping_interval))
where (previous_ping_source is not null and next_ping_source is not null)
order by ping_date
; 
create table router_ping
(ping_date timestamp,
ping_destination varchar2(50),
ping_source varchar2(50),
ping_avg    number,
packet_loss number);

insert into router_ping 
(ping_date, ping_destination, ping_source, ping_avg, packet_loss)
values
(to_date('2015-05-08 17:40:16','YYYY-MM-DD HH24:MI:SS'), 'zja68f-wr2', 'zfr11f-wr2', 273, 0);

insert into router_ping 
(ping_date, ping_destination, ping_source, ping_avg, packet_loss)
values
(to_date('2015-05-08 17:45:16','YYYY-MM-DD HH24:MI:SS'), 'zja68f-wr2', 'zfr11f-wr2', 273, 0);

insert into router_ping 
(ping_date, ping_destination, ping_source, ping_avg, packet_loss)
values
(to_date('2015-05-08 17:50:16','YYYY-MM-DD HH24:MI:SS'), 'zja68f-wr2', 'zfr11f-wr2', 273, 0);

insert into router_ping 
(ping_date, ping_destination, ping_source, ping_avg, packet_loss)
values
(to_date('2015-05-08 18:00:16','YYYY-MM-DD HH24:MI:SS'), 'zja68f-wr2', 'zfr11f-wr2', 273, 0);