繁体   English   中英

根据其“新记录”更新表“先前记录”

[英]Updating table 'previous record' based on their 'new record'

是否有可能根据其machine_id用新行date_start更新前一行date_end

机器日志:

record_id   machine_id  date_start  date_end

1           EQPT-1      10-27-2015
2           EQPT-1      10-28-2015      
3           EQPT-2      10-28-2015
4           EQPT-3      10-28-2015
5           EQPT-3      10-30-2015
6           EQPT-2      10-30-2015


UPDATE machine_log 
SET prev.date_end = new.date_start
WHERE new.machine_id = prev.machine_id
AND new.record_id != prev.record_id

如果您使用的是SQL Server 2012或更高版本,则可以使用LEAD功能: SQL Fiddle

UPDATE m
SET m.date_end = lead.endDate
FROM machine_log AS m
INNER JOIN 
(
SELECT 
record_id
, LEAD(date_start) OVER (PARTITION BY machine_id ORDER BY date_start) endDate
FROM machine_log
) AS lead ON m.record_id = lead.record_id

而且,如果您使用的是MySQL,则可以使用Limit来模拟: SQL Fiddle

UPDATE machine_log m
INNER JOIN 
(select 
 record_id, 
 (select b.date_start
  from machine_log b
  where b.machine_id=a.machine_id
    and b.date_start > a.date_start
  order by b.date_start Limit 1) as endDate
  from machine_log a
  order by record_id,date_start) lead
ON m.record_id = lead.record_id
SET m.date_end = lead.endDate
;

如果使用SQL Server:

UPDATE machine_log as next inner join machine_log as prev
on next.machine_id=prev.machine_id
SET prev.date_end = next.date_start
WHERE  next.record_id != prev.record_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM