* Uses CAST(), requires VFP9 ;) CREATE CURSOR VFP9Blds ( BldName C( 10 ), BldNum I, BldDate D ) INSERT INTO VFP9Blds ( BldName, BldNum, BldDate ) ; VALUES ( "SP0 (RTM)", 2412, {^2004-12-13} ) INSERT INTO VFP9Blds ( BldName, BldNum, BldDate ) ; VALUES ( "KB897575", 2826, {^2005-04-26} ) INSERT INTO VFP9Blds ( BldName, BldNum, BldDate ) ; VALUES ( "SP1", 3504, {^2005-11-04} ) INSERT INTO VFP9Blds ( BldName, BldNum, BldDate ) ; VALUES ( "SP2 v1", 5721, {^2007-09-21} ) INSERT INTO VFP9Blds ( BldName, BldNum, BldDate ) ; VALUES ( "SP2 v2", 5815, {^2007-10-15} ) INSERT INTO VFP9Blds ( BldName, BldNum, BldDate ) ; VALUES ( "KB948528", 6303, {^2008-05-14} ) INSERT INTO VFP9Blds ( BldName, BldNum, BldDate ) ; VALUES ( "KB952548", 6602, {^2008-06-03} ) * Generate some statistics: * Column NewBldsSP0 is number of new builds since SP0 * Column DaysSP0 is number of days since build of SP0 * Column BldRateSP0 is average Builds/Day since SP0 * Column NewBldsLatest is number of new builds since prior build * Column DaysLatest is number of days since prior build * Column BldRateLatest is average Builds/Day since prior build SELECT ; * ; , CAST( 0 AS I ) AS NewBldsSP0 ; , CAST( 0 AS I ) AS DaysSP0 ; , CAST( 0 AS N( 5, 2 ) ) AS BldRateSP0 ; , CAST( 0 AS I ) AS NewBldsLatest ; , CAST( 0 AS I ) AS DaysLatest ; , CAST( 0 AS N( 5, 2 ) ) AS BldRateLatest ; FROM VFP9Blds ; INTO CURSOR VFP9Stats ; ORDER BY BldNum ; READWRITE GO TOP IN VFP9Stats m.BldSP0 = VFP9Stats.BldNum m.DateSP0 = VFP9Stats.BldDate m.BldPrior = m.BldSP0 m.DatePrior = m.DateSP0 SKIP 1 IN VFP9Stats SCAN REST REPLACE ; NewBldsSP0 WITH BldNum - m.BldSP0 ; , DaysSP0 WITH BldDate - m.DateSP0 ; , BldRateSP0 WITH ( ( BldNum - m.BldSP0 ) / ( BldDate - m.DateSP0 ) ) ; , NewBldsLatest WITH BldNum - m.BldPrior ; , DaysLatest WITH BldDate - m.DatePrior ; , BldRateLatest WITH ( ( BldNum - m.BldPrior ) / ( BldDate - m.DatePrior ) ) ; NEXT 1 ; IN VFP9Stats m.BldPrior = VFP9Stats.BldNum m.DatePrior = VFP9Stats.BldDate ENDSCAN GO TOP IN VFP9Stats BROWSE NOWAIT