在输入日期

时间:2016-04-06 15:38:41

标签: sql postgresql

表A:

id - primary key
order_date - timestamp
last_updated - timestamp
company_id - company table's primary key

表B:

id - primary key
company_id - company table's primary key
last_updated - timestamp
creation_date - timestamp

我尝试将表A的last_updated列更新为表B的last_updated列中的值。两个表都在PK列以外的所有列中都有重复的内容。

这是我的思考过程,但我无法正确使用SQL:

  1. 对于表A中的每一行,我需要在表B上找到匹配的company_id

  2. 假设从表B中找到了25个针对该company_id的结果。在这25个结果中,我需要在表B中找到具有MAX creation_date的行,该行在表A' order_date之前。

  3. 这会将结果降低一个。此行的last_update值将复制到表A的last_updated列。

1 个答案:

答案 0 :(得分:2)

这可能非常昂贵,但您可以使用相关子查询来处理此问题:

update a
    set last_updated = (select b.last_update
                        from b
                        where a.company = b.company and
                              b.creation_date < a.order_date
                        order by creation_date desc
                        limit 1
                       );

为了提高性能,您需要b(company, creation_date, last_update)上的索引。