ORDER BY
(MONTH(resource_date) - MONTH(GETDATE()) + 12) % 12,
DATEADD(year, YEAR(GETDATE()) - YEAR(resource_date), resource_date),
YEAR(resource_date)
El primer término establece el pedido principal para el mes de resource_date
(el mes actual será el primero, el anterior, el último). El segundo término ordena las marcas de tiempo dentro de un mes sin importar el año de la fecha. Si sus fechas no contienen partes de tiempo o si las partes de tiempo son absolutamente irrelevantes, puede reemplazarlo con DAY(resource_date)
. Finalmente, el último término tiene en cuenta el año para fechas idénticas (también podría ser simplemente resource_date
).