Consider (after allowing for "subset of ID's from 'A'" and "filtered by a range of timestamps"):
SELECT A.id,
( SELECT COUNT(*) FROM B WHERE B.id = A.ID WHERE ???) AS B_count,
( SELECT COUNT(*) FROM C WHERE C.id = A.ID WHERE ???) AS C_count,
( SELECT COUNT(*) FROM D WHERE D.id = A.ID WHERE ???) AS D_count
FROM A
WHERE ???