Consider the table name as TEST
WITH TABLE1 (ID, WO, X, Y, Z, date) AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY TEST.WO ORDER BY TEST.WO) AS ID,
TEST.*
FROM TEST
),
TABLE2 (ID, WO, X, Y, Z, date) AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY TEST.WO ORDER BY TEST.WO) AS ID,
TEST.*
FROM TEST
)
SELECT TABLE1.WO,
(TABLE1.X-TABLE2.X),
(TABLE1.Y-TABLE2.Y),
(TABLE1.Z-TABLE2.Z),
TABLE1.date
FROM TABLE1
LEFT JOIN TABLE2 ON TABLE1.ID = (TABLE2.ID + 1)
AND TABLE1.WO = TABLE2.WO
WHERE TABLE2.ID IS NOT NULL