我创建了2个临时表,我需要将它们相加。
CREATE temp TABLE XXX1 (DATE TEXT, PRICE INTEGER);
INSERT INTO XXX1 VALUES
('2019-04-27 01:00', 1), ('2019-04-27 02:30', 3), ('2019-04-27 18:00',2),
('2019-04-28 17:00', 2), ('2019-04-28 21:00', 5),
('2019-04-29 17:00',50), ('2019-04-29 21:00',10),
('2019-04-30 17:00',10), ('2019-04-30 21:00',20),
('2019-05-01 17:00',40), ('2019-05-01 21:00',10),
('2019-05-02 17:00',10), ('2019-05-02 21:00', 6);
CREATE temp TABLE XXX2 (Daydiff INTEGER);
INSERT INTO XXX2 VALUES
(1), ( 3), (2),
(2), ( 5),
(50), (10),
(10), (20),
(40), (10),
(10), (6);
我尝试使用
select (DATE+Daydiff) as CorrectDate, Price from XXX2 XXX1
它出了问题。然后我试了一下,这里显示Daydiff不存在。
select (DATE+(SELECT Daydiff from XXX2)) as CorrectDate, Price from XXX1
而这也凸轮与错误。你能不能帮我一下,如何把XXX2的天数加到XXX1。因此,第一行应该有2019-04-28,下一个2019-04-30......可能的问题是,这两个表是临时的,但整个查询我需要这些临时表。
@约翰-梅尔。
正如@Gordon Linoff所指出的: SQL是一种无序集合的描述性语言。
如果你想匹配第五个元组,你的 ('2019-04-28 21:00', 5)
,与另一个第五元组,你的 ( 5)
那么你需要用匹配的标识符唯一地标识两个表的行,并使用连接功能来获取信息。
而且,如果你指定Vertica作为RDBMS,你不应该像上面那样在VALUES子句中使用多个元组,因为Vertica不支持。
如果你想在Vertica中创建一个内联表,你必须使用SELECT ... UNION SELECT语句来实现。
抛开这些庞然大物,试试这个。
DATE
和a 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)
;