lcGroupBy = [MachineName, LogDate] lnI = 0 lcSQL = [] FOR lnI = 0 TO 9 IF NOT EMPTY(lcSQL) lcSQL = lcSQL + [ UNION ] ENDIF lcSQL = lcSQL ; + [SELECT 'M] + TRANSFORM(lnI) + [' MachineName, MIN(LogDate) LogDate, .T. RunStart ] ; + [FROM Test WHERE CString LIKE '%M] + TRANSFORM(lnI) + [A%'] ; + [GROUP BY ] + lcGroupBy ENDFOR lcSQL = lcSQL + [ ORDER BY MachineName INTO CURSOR crsMachineStarts] &lcSQL lcSQL = [] FOR lnI = 0 TO 9 IF NOT EMPTY(lcSQL) lcSQL = lcSQL + [ UNION ] ENDIF lcSQL = lcSQL ; + [SELECT 'M] + TRANSFORM(lnI) + [' MachineName, MAX(LogDate) LogDate, .F. RunStart ] ; + [FROM Test WHERE CString LIKE '%M] + TRANSFORM(lnI) + [D%'] ; + [GROUP BY ] + lcGroupBy ENDFOR lcSQL = lcSQL + [ ORDER BY MachineName INTO CURSOR crsMachineEnds] &lcSQL SELECT crsMachineStarts.* FROM crsMachineStarts ; UNION ALL SELECT crsMachineEnds.* FROM crsMachineEnds ; ORDER BY 1, 2 INTO CURSOR crsMachineRuns CREATE CURSOR crsRunTimes (MachineName C(2), nRunTime I) SELECT crsMachineRuns SCAN IF NOT RunStart LOOP ENDIF lcMachine = crsMachineRuns.MachineName ldStart = crsMachineRuns.LogDate DO WHILE crsMachineRuns.MachineName = lcMachine AND crsMachineRuns.RunStart SKIP IN crsMachineRuns ENDDO IF MachineName = lcMachine AND NOT RunStart INSERT INTO crsRunTimes VALUES (lcMachine, crsMachineRuns.LogDate - ldStart) ELSE SKIP -1 IN crsMachineRuns ENDIF ENDSCAN