Do you mean like this?
...
LEFT JOIN `task_user` m ON t.`task_id`=m.`task_id` AND
m.`created`>='2007-11-01 00:00:00' AND
m.`created`<'2007-12-01 00:00:00'
...
I've done things like that in the past, but somewhere I read that it's best to have only the joining columns present in JOIN statements so I've been avoiding that.
Yes, that's what I mean. Ideally, you don't want to have inequalities (definitely not != or not in) in the join condition, but ranges (i.e. BETWEEN) can be partially optimized, so if it's required for your query, it's fine.
Oh... I call that a "derived table", to distinguish it from a subquery that refers to the "outer table". Just be aware that it's still temporary in memory, which means it's not indexed, even though the underlying table is.