我有两个看起来像这样的表:
CREATE TABLE table1 (user_id int, the_date date);
CREATE TABLE table2 (user_id int, the_date date, something_else real);
我正在编写一个看起来像这样的查询
CREATE TABLE foo AS
SELECT t1.user_id
, (t1.the_date - (t2.the_date - t1.the_date)::int) start_date
FROM table1 t1, table2 t2
where t1.user_id=t2.user_id
;
当我运行上述查询时,我在psql控制台上显示以下错误:
ERROR: syntax error at or near "$1" LINE 1: ...the_date - (t2.the_date - t1.the_date)::int) $1 ... ^
查询结果中的第二列是显示table1中日期N days BEFORE
的日期,其中N是table2和table1中日期之间的差异(以天为单位)。
注意:table2
的日期总是晚于table1
中的日期。
如何执行此日期计算并将结果存储为查询中的新列别名?
我正在使用PG 8.4。
答案 0 :(得分:2)
作为@LisMorski commented,您需要对t1.user_id
进行表格限定,以消除您拥有它的方式。
我还建议进行其他一些调整:
CREATE TABLE foo AS
SELECT user_id
,(t1.the_date - (t2.the_date - t1.the_date)) AS start_date
FROM table1 t1
JOIN table2 t2 USING (user_id);
减去两个日期会产生整数。演员是多余的。
对于column aliases,最好使用AS
关键字(虽然通常可以省略表别名)。我引用手册here:
您可以省略
AS
,但仅限于所需的输出名称不匹配 任何PostgreSQL关键字(see Appendix C)。为了防范 可能的未来关键字添加,建议您始终 写入AS
或双引号输出名称。)
user_id
,您不必再对其进行表限定。