SQL> SELECT m.type_id, 2 SUM(CASE WHEN (m.rn = 1 AND m.date_id = '20110703') THEN 1 ELSE 0 END) new_num, 3 SUM(CASE WHEN (m.rn = 1 AND m.date_id > m.min_date AND m.date_id <= '20110703') THEN 1 ELSE 0 END) all_new_num 4 FROM ( 5 SELECT t.date_id, 6 t.type_id, 7 ROW_NUMBER() OVER(PARTITION BY t.type_id,t.user_phone ORDER BY t.date_id) rn, 8 MIN(t.date_id) over(PARTITION BY t.type_id ORDER BY t.date_id) min_date 9 FROM tab t 10 ) m GROUP BY m.type_id 11 ;