ORDER BY
(MONTH(resource_date) - MONTH(GETDATE()) + 12) % 12,
DATEADD(year, YEAR(GETDATE()) - YEAR(resource_date), resource_date),
YEAR(resource_date)
O primeiro termo define a ordem principal pelo mês de
resource_date
(o mês atual será o primeiro, o anterior, o último). O segundo termo ordena os carimbos de data/hora dentro de um mês, independentemente do ano da data. Se suas datas não contiverem partes de tempo ou se as partes de tempo forem absolutamente irrelevantes, você poderá substituí-las por DAY(resource_date)
. Finalmente, o último termo leva em consideração o ano para datas idênticas (também pode ser simplesmente resource_date
).