If your DBMS supports window functions (e.g. SQL Server 2005+)
SELECT id,
count(*) AS res
FROM (SELECT *,
[pNum] - ROW_NUMBER() OVER (PARTITION BY [id] ORDER BY [pNum]) AS Grp
FROM YourTable) T
GROUP BY id,
Grp