0

次のように 2 つのテーブルがあり、WorksTracking からのデータで WorksOperation テーブルを更新する必要があります。

WorksTracking テーブル。

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 = 終了

これは私が必要とするものです

WorksOperation テーブル。

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 に答える