我在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
的所有可能值。
答案 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以外的数据库中的子查询。