У меня есть таблица a
в Vertica, содержащая item_id
, прикрепленную к code
во время from_date
create table a (
code varchar(16),
item_id int,
from_date timestamptz
);
и таблица b
, содержащая code
для данной даты t
create table b (
code varchar(16),
t date
);
Мне нужно получить a.item_id
из b.code
на дату b.t
. Данные выглядят так:
insert into a values ('abc', 1, '2013-01-01 10:00:00 EST'::timestamptz);
insert into a values ('abc', 2, '2013-01-05 11:00:00 EST'::timestamptz);
insert into a values ('abc', 3, '2013-01-09 9:00:00 EST'::timestamptz);
insert into b values ('abc', '2013-01-06'::date);
Я попытался использовать Vertica INTERPOLATE в ЛЕВОМ ПРИСОЕДИНЯЙТЕСЬ, чтобы получить предыдущую пару (code, item_id)
в момент времени t
с
select
b.code, b.t, a.item_id
from b
left join a on a.code = b.code and b.t INTERPOLATE PREVIOUS VALUE a.t;
Это дает мне ошибку типа Interpolated predicates can accept arguments of the same type only
.
Поэтому я попытался преобразовать b.t
в временную метку
select
b.code, b.t, a.item_id
from b
left join a on a.code = b.code
and (b.t::timestamptz) INTERPOLATE PREVIOUS VALUE a.t;
Это дает мне синтаксическую ошибку Syntax error at or near "INTERPOLATE"
.
Без INTERPOLATE выражение SQL работает, но не соединяется с предыдущей строкой.
Можно ли преобразовать мою дату в метку времени в JOIN с INTERPOLATE?
Если нет, есть ли другой подход, который позволил бы мне получить текущий item_id
во время t
?