Its interesting to see how other people solve the same types of problems.Usually when the business calls for a GROUP BY around date/time components I see something like (in this case, grouping around CCYYMM):

Group By Replace(Convert(VarChar(7),[YourDateTimeColumn],121),'-','')

I came up with this implementation (which also does the "ceiling" part properly as per antony-688446's comment):