我可以将临时表中的两列加在一起吗?

Can I sum up two columns from temporary tables together?

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

@John Mayer:

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

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

并且,如果您将 Vertica 指定为 RDBMS,则不应像上面那样在 VALUES 子句中使用多个元组,因为 Vertica 不支持它。

如果要在 Vertica 中创建内联 table,则必须为此使用 SELECT .. UNION SELECT 语句。

有了这些自以为是的方法,试试这个:

  1. 创建您的 tables(无论是临时的还是永久的,都无关紧要),对数据类型进行最低限度的尽职调查 - 其中 DATETIMESTAMP 是两个不同的东西,而且肯定不是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. 然后,运行 连接两个 table 的查询,如下所示:
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)
;