@ Джон Майер:
Как отметил @Gordon Linoff: SQL - это описательный язык для неупорядоченных множеств.
Если вы хотите сопоставить пятый кортеж, ваш ('2019-04-28 21:00', 5)
, с другим пятым кортежем, вашим ( 5)
, то вам необходимо однозначно идентифицировать строки обеих таблиц с соответствующими идентификаторами и использовать функциональность объединения для получения информации.
И, если вы указали Vertica в качестве СУБД, вам не следует использовать несколько кортежей в предложении VALUES, как вы делали выше, поскольку Vertica не поддерживает его.
Если вы хотите создать встроенную таблицу в Vertica, вы должны использовать для этого инструкцию SELECT .. UNION SELECT.
С этими средствами понтификации попробуйте следующее:
- Создайте свои таблицы (временные или постоянные, не имеет значения) с минимальной должной осмотрительностью в отношении типов данных - где
DATE
и TIMESTAMP
- это две разные вещи, а определенно не VARCHAR
, не говоря уже о странных TEXT
, которые вы используете, и, если вам нужно присоединиться к ним позже, с идентификаторами, а затем заполните их.
DROP TABLE IF EXISTS xxx1;
DROP TABLE IF EXISTS xxx2;
CREATE TABLE xxx1 (
id INTEGER
, dt TIMESTAMP(0)
, price INTEGER
);
CREATE TABLE xxx2 (
id INTEGER
, daydiff INTEGER
);
INSERT INTO xxx1
SELECT 1, TIMESTAMP '2019-04-27 01:00', 1
UNION ALL SELECT 2, TIMESTAMP '2019-04-27 02:30', 3
UNION ALL SELECT 3, TIMESTAMP '2019-04-27 18:00', 2
UNION ALL SELECT 4, TIMESTAMP '2019-04-28 17:00', 2
UNION ALL SELECT 5, TIMESTAMP '2019-04-28 21:00', 5
UNION ALL SELECT 6, TIMESTAMP '2019-04-29 17:00',50
UNION ALL SELECT 7, TIMESTAMP '2019-04-29 21:00',10
UNION ALL SELECT 8, TIMESTAMP '2019-04-30 17:00',10
UNION ALL SELECT 9, TIMESTAMP '2019-04-30 21:00',20
UNION ALL SELECT 10, TIMESTAMP '2019-05-01 17:00',40
UNION ALL SELECT 11, TIMESTAMP '2019-05-01 21:00',10
UNION ALL SELECT 12, TIMESTAMP '2019-05-02 17:00',10
UNION ALL SELECT 13, TIMESTAMP '2019-05-02 21:00', 6
;
INSERT INTO xxx2
SELECT 1, 1
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 2
UNION ALL SELECT 4, 2
UNION ALL SELECT 5, 5
UNION ALL SELECT 6,50
UNION ALL SELECT 7,10
UNION ALL SELECT 8,10
UNION ALL SELECT 9,20
UNION ALL SELECT 10,40
UNION ALL SELECT 11,10
UNION ALL SELECT 12,10
UNION ALL SELECT 13, 6
;
Затем выполните запрос, объединяющий две таблицы, например:
SELECT
dt::DATE + daydiff AS correct_date
, TIMESTAMPADD(day,daydiff,dt) AS correct_timestamp
, price
FROM xxx1
JOIN xxx2
USING(id)
-- (or: ON xxx1.id = xxx2.id)
;