在SQL中返回填充时间序列数据

时间:2015-04-27 14:19:46

标签: sql time-series vertica

我在SQL(Vertica)数据库表中有数据,看起来像这样......

      ts  src val
---------------------------------
10:25:10    C  72
10:25:09    A  13
10:25:08    A  99
10:25:05    B  22
10:25:02    C  71

我需要"旋转"将其添加到列中并按src列回填最后一个已知值。

      ts a_val b_val c_val
----------------------------
10:25:10    13    22    72
10:25:09    13    22    71
10:25:08    99    22    71
10:25:05  null    22    71
10:25:02  null  null    71

我提前知道src的所有可能值。

1 个答案:

答案 0 :(得分:0)

可能最简单的方法是使用相关子查询。这不一定具有最佳性能:

select t.ts,
       (select t2.val from table t2 where t2.ts <= t.ts and t2.src = 'a' order by t2.ts desc) as val_a,
       (select t2.val from table t2 where t2.ts <= t.ts and t2.src = 'b' order by t2.ts desc) as val_b,
       (select t2.val from table t2 where t2.ts <= t.ts and t2.src = 'c' order by t2.ts desc) as val_c
from table t;

table(ts, src, val)上的索引可能有助于Vertica以外的数据库中的子查询。