Vous voudrez transformer ceci en :
.order("COALESCE(CAST(custom_fields.value AS timestamp), custom_fields.value) DESC")
pour plus de lisibilité.
Vous triez par sortDate, et lorsque celle-ci est absente, vous utilisez createdAt. Le tout dans l’ordre décroissant. La requête renvoie les données exactement comme demandé, car 2020 est « supérieur » à la deuxième place de 2011.
Si vous voulez que les valeurs NULL soient placées en dernier, vous devez utiliser :
.order("CAST(custom_fields.value AS timestamp) DESC NULLS LAST")