我可以将临时表的两列相加吗?

问题描述 投票:0回答:1

我创建了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......可能的问题是,这两个表是临时的,但整个查询我需要这些临时表。

sql vertica
1个回答
1
投票

@约翰-梅尔。

正如@Gordon Linoff所指出的: SQL是一种无序集合的描述性语言。

如果你想匹配第五个元组,你的 ('2019-04-28 21:00', 5) ,与另一个第五元组,你的 ( 5)那么你需要用匹配的标识符唯一地标识两个表的行,并使用连接功能来获取信息。

而且,如果你指定Vertica作为RDBMS,你不应该像上面那样在VALUES子句中使用多个元组,因为Vertica不支持。

如果你想在Vertica中创建一个内联表,你必须使用SELECT ... UNION SELECT语句来实现。

抛开这些庞然大物,试试这个。

  1. 创建你的表(不管是临时的还是永久的,都无所谓),对数据类型进行最低限度的尽职调查--在这里,你会发现,如果你的表是临时的,那么你的表是永久的。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
;
  1. 然后,运行一个连接两个表的查询,像这样。
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)
;
© www.soinside.com 2019 - 2024. All rights reserved.