0

我有 2 个表,如下所示,我需要使用 WorksTracking 中的数据更新 WorksOperation Table

作品跟踪表。

ID  WorksID  WorksOperationID  DateTime                 SubOperationID  EmployeeID 
1   2182     5363              2012-11-26 12:30:00.000  3               96
2   6866     9856              2012-11-26 10:26:00.000  3               100
3   2182     5363              2012-11-26 16:13:00.000  4               96
4   6866     9856              2012-11-26 13:42:00.000  4               100
6   2182     5363              2012-11-26 06:30:00.000  3               96
7   2182     5363              2012-11-26 12:30:00.000  4               96

SubOperationID = 3 = 开始 4 = 结束

这就是我需要的

作品操作表。

ID  WorksID  WorksOperationID  StartTime                EndTime                SubOpID  EmpID 
1   2182     5363              2012-11-26 12:30:00.000  2012-11-26 16:13:00.000  4       96
2   6866     9856              2012-11-26 10:26:00.000  2012-11-26 13:42:00.000  4       100
3   2182     5363              2012-11-26 06:30:00.000  2012-11-26 12:30:00.000  4       96
4

1 回答 1

0

这将适用于 SQL Server(2005 和更高版本),但如果这不是您的 RDBMS,它可以很容易地进行调整:

    ;WITH ALLSTARTS AS 
( 
    SELECT * FROM WorksTracking WHERE SubOperationID = 3
)
--INSERT INTO WorksOperation 
SELECT  s.WorksID ,
        s.WorksOperationID ,
        s.DateTime AS StartTime,
        e.DateTime AS EndTime,
        e.SubOperationID AS SubOpID,
        e.EmployeeID FROM ALLSTARTS s 
INNER JOIN dbo.WorksTracking e ON e.SubOperationID = 4 
AND e.DateTime = (SELECT MIN(e.DateTime) FROM WorksTracking e WHERE s.WorksID = e.WorksID AND s.WorksOperationID = e.WorksOperationID AND e.DateTime>s.DateTime)

SqlFiddle

于 2013-03-25T15:20:44.783 回答