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