【问题标题】:Update latest data更新最新数据
【发布时间】:2020-09-02 22:15:02
【问题描述】:

我想更新 MASTER_DB 表的 FIRST_DATE 字段。 但是,我想用 RECORD_DB 表中最新记录的日期进行更新。

UPDATE
  MASTER_DB
SET
  MASTER_DB.FIRST_DATE = RECORD_DB.DATE_R
FROM
  MASTER_DB 
INNER JOIN
  RECORD_DB
ON
  MASTER_DB.ID = RECORD_DB.ID

例子:

I)表 MASTER_DB

ID   FIRST_DATE
122

II)表RECORD_DB

ID   DATE_R
122  2015-01-01
122  2016-01-02
122  2017-01-03

MASTER_DB表的FIRST_DATE字段的更新必须接收到与RECORD_DB表相同ID的最高日期,即2017-01-03

MASTER_DB 表中的输出应该是:

 ID   FIRST_DATE
 122  2017-01-03

【问题讨论】:

    标签: sql sql-server join sql-update max


    【解决方案1】:

    MySQL 中的正确语法是:

    UPDATE MASTER_DB m JOIN
           (SELECT ID, MAX(DATE_R) AS MIN_DATE_R
            FROM  RECORD_DB
            GROUP BY ID
           ) R
           ON R.ID = m.ID
        SET M.FIRST_DATE = R.MAX_DATE_R;
    

    SQL Server 中的语法:

    UPDATE m
        SET M.FIRST_DATE = R.MAX_DATE_R
    FROM MASTER_DB m JOIN
         (SELECT ID, MAX(DATE_R) AS MAX_DATE_R
          FROM  RECORD_DB
          GROUP BY ID
         ) R
         ON R.ID = m.ID;
    

    【讨论】:

    • MIN 应该是MAX
    • JOIN 需要一个 ON 条件。
    • 问题已从 MySQL 更改为 SQL-Server。此答案适用于 MySQL。
    • @Barmar 。 . .谢谢你。当我对这个问题发表评论时,我分心了。
    • 我什至没有注意到答案来自询问标签的同一个人。
    【解决方案2】:

    一个选项是相关子查询:

    update master_db m
    set m.first_date = (select max(r.date_r) from record_db r where r.id = m.id)
    

    如果存在没有任何记录行的主行,并且您不想将它们更新为 null,那么连接更合适 - 或可更新的 CTE:

    with m
    set m.first_date = r.max_date_r
    from master_db m
    inner join (select id, max(r.date_r) max_date_r record_db goup by id) r 
        on r.id = m.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2021-10-27
      • 1970-01-01
      • 2021-01-02
      • 2014-09-08
      相关资源
      最近更新 更多