ORDER BY
(MONTH(resource_date) - MONTH(GETDATE()) + 12) % 12,
DATEADD(year, YEAR(GETDATE()) - YEAR(resource_date), resource_date),
YEAR(resource_date)
Le premier terme définit l'ordre principal au mois de resource_date
(le mois en cours sera le premier, le précédent, le dernier). Le deuxième terme classe les horodatages dans un mois, quelle que soit l'année de la date. Si vos dates ne contiennent pas de parties horaires ou si les parties horaires ne sont absolument pas pertinentes, vous pouvez les remplacer par DAY(resource_date)
. Enfin, le dernier terme prend en compte l'année pour des dates par ailleurs identiques (peut aussi être simplement resource_date
).