clear CREATE CURSOR Test (iCode I, dDate D, nPrice N(6,2)) DATE=DATE(2006,01,01) FOR c=1000 TO 1050 FOR k=0 to 100 INSERT INTO Test VALUES (m.c , m.date+m.k, M.K) NEXT NEXT INDEX ON iCode TAG iCode t1=SECONDS() SELECT B1.iCode, B1.dDate, B1.nPrice ; FROM Test B1 ; JOIN Test B2 ; ON B1.iCode = B2.iCode ; AND B1.dDate <= B2.dDate ; GROUP BY 1, 2, 3 ; HAVING CNT(*) <= 3 ; INTO CURSOR MostRecent SELECT iCode, Avg(nPrice ) ; FROM MostRecent ; GROUP BY iCode; INTO CURSOR MostRecent ? 'SQL',SECONDS()-T1 t1=SECONDS() SELECT iCode,nPrice avgPrice FROM Test WHERE .F. INTO CURSOR MostRecent2 READWRITE SELECT Test INDEX ON BINTOC(iCode)+DTOS(dDate) TAG GROUPING DESC iCode=iCode DO WHILE NOT EOF() CALCULATE NEXT 3 WHILE iCode=m.iCode AVG(nPrice) TO avgPrice INSERT INTO MostRecent2 VALUES (m.iCode,m.avgPrice) LOCATE REST FOR iCode#m.iCode iCode=iCode ENDDO DELETE TAG GROUPING ? 'xbase',SECONDS()-T1