How to use LATERAL as a for loop in Postgres

This example shows how to use LATERAL as a for loop in Postgres. The query will perform a lateral subquery for each month. The subquery returns the number of active courses during each month. ```sql -- A list of months and their start and end timestamps WITH months AS ( SELECT start, start + (interval '1' month) - (interval '1' second) AS end FROM ( SELECT generate_series(DATE('2010-01-01'), DATE('2010-12-01'), interval '1 month') AS start ) months ) -- For each month, run a query that returns the number of active courses during that month SELECT * FROM months AS m LEFT JOIN LATERAL ( SELECT count(id) FROM courses AS c WHERE (c.start <= m.end AND c.start >= m.start) OR (c.end <= m.end AND c.end IS NULL) ) AS results ON TRUE; ```