Sql 更新最新数据

Sql 更新最新数据,sql,sql-server,join,sql-update,max,Sql,Sql Server,Join,Sql Update,Max,我想更新MASTER_DB表中的第一个_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 例如: 一) 表主控数据库 ID FIRST_DATE 122 二) 表记录数据库 ID DAT

我想更新MASTER_DB表中的第一个_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
例如:

一) 表主控数据库

ID   FIRST_DATE
122
二) 表记录数据库

ID   DATE_R
122  2015-01-01
122  2016-01-02
122  2017-01-03
主\u DB表的第一个\u日期字段的更新必须接收与记录\u DB表相同ID的最高日期,即2017-01-03

t主数据库表中的输出应为:

 ID   FIRST_DATE
 122  2017-01-03

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;

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;

一个选项是相关子查询:

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

一个选项是相关子查询:

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

MIN
应该是
MAX
对于
加入
,您需要一个
开启
条件。问题已从MySQL改为SQL Server。这是MySQL的答案。@Barmar。非常感谢。当我留下关于这个问题的评论时,我分心了。我甚至没有注意到答案来自于询问标签的同一个人。
MIN
应该是
MAX
你需要一个
上的
条件才能加入
。这个问题已经从MySQL改为SQL Server。这是MySQL的答案。@Barmar。非常感谢。当我留下关于这个问题的评论时,我分心了。我甚至没有注意到答案来自于询问标签的同一个人。