EDITO:
No sé si será la más eficiente:
Código sql:
Ver originalSELECT pasos.ID, IFNULL(t2.NUMERO,0) NUMERO_CONTACTOS FROM pasos
LEFT JOIN (SELECT COUNT(*) NUMERO, T1.ultpaso PASO
FROM (SELECT cp.id_contacto, MAX(cp.id_paso) ultpaso
FROM contactos c INNER JOIN contactos2pasos cp ON c.ID = cp.id_contacto GROUP BY c.ID)t1
GROUP BY T1.ultpaso)t2 ON pasos.id = t2.PASO
ORDER BY pasos.ID
Buscando un rango de fechas (esto no lo he probado):
Código sql:
Ver originalSELECT pasos.ID, IFNULL(t2.NUMERO,0) NUMERO_CONTACTOS FROM pasos
LEFT JOIN (SELECT COUNT(*) NUMERO, T1.ultpaso PASO
FROM (SELECT cp.id_contacto, MAX(cp.id_paso) ultpaso
FROM contactos c INNER JOIN contactos2pasos cp ON c.ID = cp.id_contacto WHERE c.fecha BETWEEN '2009-02-01' AND '2009-02-15' GROUP BY c.ID)t1
GROUP BY T1.ultpaso)t2 ON pasos.id = t2.PASO
ORDER BY pasos.ID