如何将联接数据列作为一个表中的新列

时间:2017-05-29 01:37:24

标签: database postgresql join

我有两个表A和B.表A的格式如下:

id       task_start_time            task_end_time
__       _______________            _____________
1       2017-03-21 00:09:10     2017-03-21 00:12:18
1       2017-03-21 00:12:19     2017-03-21 00:12:56
1       2017-03-21 00:12:57     2017-03-21 00:13:10
2       2017-03-21 10:09:10     2017-03-21 10:25:34
2       2017-03-21 10:25:34     2017-03-21 11:09:10
2       2017-03-21 11:09:10     2017-03-21 11:21:39
3       2017-03-21 12:09:10     2017-03-21 12:19:19
3       2017-03-21 12:19:19     2017-03-21 12:29:19
3       2017-03-21 12:29:10     2017-03-21 12:39:10

表B的格式如下

id          task_end_time                previous_task_end_time

__          _____________                ______________________
1          2017-03-21 00:12:18             NA
1          2017-03-21 00:12:56             2017-03-21 00:12:18 
1          2017-03-21 00:13:10             2017-03-21 00:12:56
2          2017-03-21 10:25:34             2017-03-21 10:25:34
2          2017-03-21 11:09:10             2017-03-21 11:09:10
2          2017-03-21 11:21:39             2017-03-21 11:21:39
3          2017-03-21 12:19:19             2017-03-21 12:19:19
3          2017-03-21 12:29:19             2017-03-21 12:29:19
3          2017-03-21 12:39:10             2017-03-21 12:39:10

现在我需要以这种格式使用表格

id       task_start_time            task_end_time        previous_task_end_time

__       _______________            _____________       ______________________
1       2017-03-21 00:09:10     2017-03-21 00:12:18             NA
1       2017-03-21 00:12:19     2017-03-21 00:12:56             2017-03-21 00:12:18 
1       2017-03-21 00:12:57     2017-03-21 00:13:10             2017-03-21 00:12:56
2       2017-03-21 10:09:10     2017-03-21 10:25:34             2017-03-21 10:25:34
2       2017-03-21 10:25:34     2017-03-21 11:09:10             2017-03-21 11:09:10
2       2017-03-21 11:09:10     2017-03-21 11:21:39             2017-03-21 11:21:39
3       2017-03-21 12:09:10     2017-03-21 12:19:19             2017-03-21 12:19:19
3       2017-03-21 12:19:19     2017-03-21 12:29:19             2017-03-21 12:29:19
3       2017-03-21 12:29:10     2017-03-21 12:39:10             2017-03-21 12:39:10

我知道我可以通过id和start_time进行内部连接,但是如何将生成的previous_end_time保存为A中的新列?任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

首先,在表格previous_end_time中创建新列a

ALTER TABLE a ADD COLUMN previous_end_time TIMESTAMP;

然后更新列。

UPDATE a SET previous_end_time = b.previous_task_end_time
FROM b WHERE a.id = b.id AND a.task_end_time = b.task_end_time