我有两个看起来像这样的表:
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 ... ^
查询结果的第二列将显示一个日期,N days BEFORE该日期是表1中的日期,其中N是表2中的日期与表1中的日期之间的差(以天为单位)。
N days BEFORE
注意:的table2日期总是比中的日期晚table1。
table2
table1
如何执行此日期计算并将结果存储为查询中的新列别名?
我正在使用PG 8.4。
您将需要通过表修饰t1.user_id来消除歧义。加上其他调整:
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);
减去两个日期将得出整数。演员表是多余的。
不要忽略列别名的AS关键字-尽管通常可以省略表别名。手册:AS
AS
您可以省略AS,但是仅当所需的输出名称与任何PostgreSQL关键字都不匹配时(请参阅附录C)。为了防止将来可能添加新的关键字,建议您始终AS对输出名称进行写或双引号。)
USING
user_id