sql - 填补查询返回值的空白

标签 sql oracle

我有一个包含如下列的数据库。

Id    Date              Value
1    12/01/2010 09:30   127.31
1    12/01/2010 09:31   133.41
1    12/01/2010 09:32   147.54
1    12/01/2010 09:34   155.66

本质上,我存储与时间戳对应的值。但是,如果值为 0,我不存储它(它是一个非常大的数据库,并且 0 经常出现,所以我们决定不包括这些行以节省空间)。在上面的例子中,12/01/2010 09:33有一个 0 值所以它不存储。但是,当用户查询数据库时,他会执行类似的操作
select * from table where Id = '1' and Date > to_date('12/01/2010', 'MM/DD/YYYY')`

我需要填补空白并使用 0 值提及时间戳。我怎样才能做到这一点?

最佳答案

select 
   nvl(b.id,1) as id, 
   alldates.Date as Date, 
   nvl(b.value,0) as value
from 
  (select level/1440 + to_date('12/01/2010', 'MM/DD/YYYY') as Date
        from dual
        connect by level < 1440 --one day
   ) alldates
  left join
  (select * from table where Id = '1' and Date > to_date('12/01/2010', 'MM/DD/YYYY') b
  on alldates.Date = b.Date

更新 (回复评论):
select 
   nvl(b.id,1) as id, 
   alldates.Date as Date, 
   nvl(b.value,0) as value,
   nvl(b.value, lag(b.value) over (order by b.Date nulls last)) last_valid_value
from 
  (select level/1440 + to_date('12/01/2010', 'MM/DD/YYYY') as Date
        from dual
        connect by level < 1440 --one day
   ) alldates
  left join
  (select * from table where Id = '1' and Date > to_date('12/01/2010', 'MM/DD/YYYY') b
  on alldates.Date = b.Date

关于sql - 填补查询返回值的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8253612/

相关文章:

java - SQL 异常。更新 jdbc 中的行

在最近的可用日期进行 SQL 联接

java - Oracle 类型 DATE

oracle - Perl 和 DBD::Oracle - 可获取多少行?缓存中的行?

sql - 每行的 SUM 和过滤结果 SUM IN $x

sql - 全文搜索 CONTAINSTABLE

mysql - 一个查询中的多个 INSERT INTO 语句

带有 where 子句的 Oracle 唯一约束

oracle - 从多个列表填充Grails GSP表

Oracle 客户端使用 ulong 参数抛出 ArgumentException