簡體   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