CREATE CURSOR table (customer C(1), date D,value I) INSERT INTO table VALUES ('A',DATE(2007,01,01),1) INSERT INTO table VALUES ('A',DATE(2007,01,02),2) INSERT INTO table VALUES ('A',DATE(2007,01,03),3) INSERT INTO table VALUES ('A',DATE(2007,01,04),4) INSERT INTO table VALUES ('A',DATE(2007,01,05),5) INSERT INTO table VALUES ('A',DATE(2007,01,06),6) INSERT INTO table VALUES ('A',DATE(2007,01,07),7) INSERT INTO table VALUES ('A',DATE(2007,01,08),8) INSERT INTO table VALUES ('B',DATE(2007,01,02),2) INSERT INTO table VALUES ('B',DATE(2007,01,03),3) INSERT INTO table VALUES ('B',DATE(2007,01,04),4) INSERT INTO table VALUES ('B',DATE(2007,01,05),5) INSERT INTO table VALUES ('B',DATE(2007,01,16),6) INSERT INTO table VALUES ('B',DATE(2007,01,17),7) INSERT INTO table VALUES ('B',DATE(2007,01,18),8) INSERT INTO table VALUES ('C',DATE(2007,01,17),7) INSERT INTO table VALUES ('C',DATE(2007,01,18),8) * the correct solution, but ... SELECT customer, date,value; FROM table T where T.date IN (SELECT TOP 5 date FROM table WHERE customer = T.customer ORDER BY date DESC) * a long way solution, but ... SELECT customer, date,value; FROM table T ; WHERE (SELECT COUNT(*) FROM table X WHERE X.customer = T.customer AND X.date >= T.date ) <=5 * another long solution SELECT customer, date,value; , (SELECT COUNT(*) FROM table X WHERE X.customer = T.customer AND X.date >= T.date ) cn; FROM table T ; HAVING cn<=5