2015-04-27 2 views
1

У меня есть данные в (Vertica) таблице базы данных SQL, который выглядит, как это ...Назад заполнение данных временных рядов, в SQL

 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.

+0

Vertica не использует индексы. – Kermit