[英]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.