Wie ist denn deine Tabelle aufgebaut, ich bin etwas verwirrt.
Es folgt vermutlich ein Syntax-Fehler, weil die Syntax an vielen Stellen fehlerhaft ist.
Es fehlt ein FROM bei months und ich verstehe nicht, wieso ein JOIN. Also wenn ein subquery, aber auch hier macht das wenig Sinn.
Du kannst schließlich direkt das Subquery nur aufrufen, das liefert dir schließlich dein Resultat...
Kannst ja einfach:
SELECT COUNT(*) as count FROM orders WHERE time BETWEEN '2022-01-01' AND '2022-01-31';
Jahr und Monat kannst ja jeweils dynamisch einfach übergeben und dann erhältst du dein Ergebnis.
Ich verstehe nicht, was du da noch "dynamischer" machen magst.
Wenn du doch schon genau das machen kannst, was du magst?!