【问题标题】:Update column with max date before entered date使用输入日期之前的最大日期更新列
【发布时间】:2016-04-06 23:43:55
【问题描述】:

表 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 中找到该 company_id 的 25 个结果。在这 25 个结果中,我需要在表 B 中找到在表 A 的 order_date 之前具有 MAX creation_date 的行。

  3. 这会将结果减一。并且这一行的 last_update 值会被复制到 TABLE A 的 last_updated 列中。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    这可能非常昂贵,但您可以使用相关子查询来解决这个问题:

    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) 上建立索引。

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多