ORDER BY
(MONTH(resource_date) - MONTH(GETDATE()) + 12) % 12,
DATEADD(year, YEAR(GETDATE()) - YEAR(resource_date), resource_date),
YEAR(resource_date)
Il primo termine imposta l'ordine primario entro il mese di resource_date
(il mese corrente sarà il primo, il precedente, l'ultimo). Il secondo termine ordina i timestamp entro un mese indipendentemente dall'anno della data. Se le tue date non contengono parti temporali o se le parti temporali sono assolutamente irrilevanti, puoi sostituirle con DAY(resource_date)
. Infine, l'ultimo termine tiene conto dell'anno per date altrimenti identiche (potrebbe anche essere semplicemente resource_date
).